webentwicklung-frage-antwort-db.com.de

"Das Attribut 'Programm' existiert nicht" für das grundlegende Projekt "node.js"

Ich habe eine einfache node.js-Anwendung erstellt (Quellcode hier https://Azure.Microsoft.com/de-de/blog/visual-studio-code-and-Azure-app-service-a-perfect-fit/ )

var http = require('http');
http.createServer(function (req, res) {
    console.log('Got request for ' + req.url);
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('<h1>Hello Code and Azure Web Apps!</h1>');
}).listen(process.env.PORT);

Und klickte auf VSCode generierte launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/app.js",
            "stopOnEntry": false,
            "args": [],
            "cwd": "${workspaceRoot}",
            "preLaunchTask": null,
            "runtimeExecutable": null,
            "runtimeArgs": [
                "--nolazy"
            ],
            "env": {
                "NODE_ENV": "development"
            },
            "externalConsole": false,
            "sourceMaps": false,
            "outDir": null
        },
        {
            "name": "Attach",
            "type": "node",
            "request": "attach",
            "port": 5858,
            "address": "localhost",
            "restart": false,
            "sourceMaps": false,
            "outDir": null,
            "localRoot": "${workspaceRoot}",
            "remoteRoot": null
        }
    ]
}

Und noch immer beim Start sehe ich: 

Das Attribut 'Programm' ist nicht vorhanden.

Kann jemand helfen, was nicht stimmt?

47
Valeriy

Ich glaube, dass Sie ${workspaceRoot}/server.js brauchen, nicht ${workspaceRoot}/app.js für program. Der Code, den Sie verwenden, hat keine app.js, das sagt Ihnen der (schlecht formulierte) Fehler.

42
mdickin

Dieses Problem ist auch aufgetreten, weil VS Code das .vscode-Verzeichnis mit der Datei launch.json eingefügt hat. Es hat ein Verzeichnis angelegt, also musste ich das Verzeichnis dem Pfad hinzufügen, der in der Datei launch.json definiert ist:

"program": "$ {workspaceRoot} /myDir/app.js",

Ich hoffe das hilft.

18
Colin

Ein anderes Problem, bei dem ich aufgetreten bin, ist, dass ein Pfad Using\\Backslashes\\Like\\So konfiguriert wurde und unter Windows einwandfrei funktionierte, aber auf dem Mac gab es den obigen Fehler.

(Lösung: geändert in /)

6
ripper234

Der Fehler besagt, dass der Pfad zu Ihrem Code falsch war.

VSCode definiert das übergeordnete Verzeichnis seiner Konfigurationsdatei ".vscode/launch.json" als "$ {workspaceRoot}" oder "$ {workspaceFolder}".

Wenn Sie beispielsweise die Datei "myproject/subfolder/main.js" ausführen möchten, sollten Sie "myproject/.vscode/launch.json" wie folgt konfigurieren: "program": "${workspaceRoot}/subfolder/main.js"

Beachten Sie, dass configuring "program": "${workspaceRoot}/myproject/subfolder/main.js" ein Fehler ist und den Fehler "Attribut 'Programm' nicht vorhanden" verursacht.

3
user3179473

Ich habe heute ein paar Stunden damit verschwendet, dieses Problem zu lösen. Was für mich funktionierte, war das Löschen des vorhandenen launch.json und das Ausführen der Anwendung, die Sie dazu auffordert, eine Umgebung auszuwählen, die in meinem Fall Node war. Dadurch wurde ein neuer launch.json erstellt, in dem ich den Programmpfad aktualisiert habe.

1
Awad Maharoof

Lesen Sie zunächst das offizielle Dokument , das alle Fragen beantwortet, die Sie zum Festlegen der richtigen Attribute für verschiedene Szenarien mit launch.json haben.

Um diese Frage konkret zu beantworten, enthält der ${workspaceFolder} im Wesentlichen das Verzeichnis des .vscode -Verzeichnisses, das Ihr Projektstammverzeichnis ist. Denken Sie also beim Festlegen bestimmter Dateien als Debugging-Programm daran, den Pfad aus dem Projektstammverzeichnis zuzuordnen, dh den relativen Pfad der Datei, die als Debugging-Programm festgelegt werden soll. Dies kann einfach aus dem IDE (VS-Code) abgerufen werden, indem Sie mit der rechten Maustaste auf die Datei klicken und die Option Copy Relative Path auswählen. Fügen Sie diesen dann neben dem $ {workspaceFolder} im program-Attribut in Ihrer launch.json -Datei ein, um das Problem zu beheben.

"program": "${workspaceFolder}/<relative_path>"

Ersetzen Sie den relativen Pfad durch Ihren kopierten relativen Pfad Beachten Sie, dass ich mich auf einer Mac-Plattform befinde. Bitte verwenden Sie für die Plattform geeignete Pfadtrennzeichen

Alternativ ist es sinnvoll, eine Startkonfiguration nicht speziell zu verwenden, wenn es sich um eine nicht für die Produktion vorgesehene App oder eine einfache App handelt, für die keine Startkonfigurationsdatei erforderlich ist. Wenn dies nicht der Fall ist, ist es beim Debuggen in einer Umgebung mit mehreren Zielen (Server, Client) sehr nützlich. Meiner Meinung nach macht die Verwendung eines zusammengesetzten Startkonfigurations-Setups die Dinge viel einfacher. Lesen Sie dieses Abschnitt der offiziellen Dokumente, um zu erfahren, wie Sie es einrichten, und beachten Sie dabei die relativen Pfade Ihrer Server- und Client-Dateien.

0
Avid Programmer

Der Fehler sollte idealerweise lesen "Datei, die im Programmattribut nicht vorhanden ist", da dies der Fall ist. Ab VSCode 1.30.2 wird der Pfad zusammen mit dem Fehler angezeigt.

In meinem Fall hatte ich "program": "${workspaceFolder}\\${file}", also war der Pfad wie c:\dir\c:\dir\file.js 

Ich habe dies korrigiert, indem ${workspaceFolder} entfernt wurde, da ich einzelne Dateien debuggen wollte.

0
Alex Wachira

Ich hatte das gleiche Problem. In meinem Fall hatte mein launch.json folgende Zeile

"program": "${workspaceFolder}\\index.js"

Mein aktiver Code, den ich zu debuggen versuchte, befand sich in app_v2.js. Daher habe ich ihn auf Folgendes aktualisiert und das Debugging funktioniert.

"program": "${workspaceFolder}\\app_v2.js"
0
Orhan Celik

Ich hatte die gleiche Frage und brauchte einige Stunden, um das herauszufinden. Im Grunde habe ich den Ordner nach ${workspaceFolder} gelöscht.

Das Format war ${workspaceFolder}/xxxx\\folder\\subfolder\\subfolderso, indem ich löschte, was hinter dem "workspaceFolder" liegt, und meinen Pfad mit dem doppelten umgekehrten Schrägstrich beginnt. 

0
Mjyousse