web-dev-qa-db-fra.com

"L'attribut 'programme' n'existe pas" pour le projet de base node.js

J'ai créé une application simple node.js (code source à partir d'ici https://Azure.Microsoft.com/en-us/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);

Et cliquez sur VSCode généré 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
        }
    ]
}

Et quand je suis lancé, je vois: 

L'attribut 'programme' n'existe pas.

Quelqu'un peut-il aider ce qui ne va pas?

47
Valeriy

Je crois que vous avez besoin de ${workspaceRoot}/server.js, pas ${workspaceRoot}/app.js pour program. Le code que vous utilisez n'a pas app.js, c'est ce que cette erreur (mal formulée) vous dit.

42
mdickin

J'ai également rencontré ce problème à cause de l'endroit où VS Code a mis le répertoire .vscode contenant le fichier launch.json. Il a mis en place un répertoire et je devais donc l'ajouter au chemin tel que défini dans le fichier launch.json:

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

J'espère que ça aide.

18
Colin

Un autre problème que j'ai rencontré est qu'un chemin a été configuré Using\\Backslashes\\Like\\So et a bien fonctionné sous Windows, mais sur Mac il a donné l'erreur ci-dessus.

(Solution: changé en /)

6
ripper234

L'erreur dit que le chemin d'accès à votre code était incorrect.

VSCode définit le répertoire parent de son fichier de configuration ".vscode/launch.json" comme "$ {workspaceRoot}" ou "$ {workspaceFolder}".

Ainsi, par exemple, si vous souhaitez exécuter le fichier "monprojet/sous-dossier/main.js", vous devez configurer votre "monprojet/.vscode/launch.json" comme suit: "program": "${workspaceRoot}/subfolder/main.js"

Notez que la configuration "program": "${workspaceRoot}/myproject/subfolder/main.js" est une erreur et entraînera une erreur "L'attribut 'programme' n'existe pas".

3
user3179473

J'ai passé quelques heures aujourd'hui à essayer de résoudre ce problème. Ce qui a fonctionné pour moi, c’est de supprimer le fichier launch.json existant et d’exécuter l’application, ce qui vous invite à sélectionner un environnement, qui dans mon cas était Node. Cela a créé un nouveau fichier launch.json dans lequel j'ai mis à jour le chemin du programme.

1
Awad Maharoof

Tout d’abord, lisez le document officiel document Ceci répond à toutes vos questions sur la définition des bons attributs pour différents scénarios en utilisant launch.json.

Maintenant, pour répondre spécifiquement à cette question, le ${workspaceFolder} contient essentiellement le répertoire du répertoire .vscode, qui correspond au répertoire racine de votre projet. Par conséquent, lorsque vous définissez des fichiers spécifiques en tant que programme de débogage, n'oubliez pas de mapper le chemin à partir du répertoire racine du projet ou, en d'autres termes, le chemin relatif du fichier à définir en tant que programme de débogage. Ceci peut être facilement obtenu à partir de IDE (code VS) en cliquant simplement sur le fichier avec le bouton droit de la souris et en sélectionnant l'option Copy Relative Path. Ensuite, collez ce à côté de $ {workspaceFolder} dans l'attribut du programme de votre fichier launch.json, comme ci-dessous, pour résoudre le problème.

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

Remplacez le chemin relatif par votre chemin relatif copié comme indiqué précédemment Notez que je suis sur une plate-forme Mac. Veuillez utiliser des séparateurs de chemin appropriés à la plate-forme

Sinon, ne pas utiliser spécifiquement une configuration de lancement est logique s'il s'agit d'une application non destinée à la production ou d'une application simple ne justifiant pas un fichier de configuration de lancement. Cependant, dans le cas contraire, il est extrêmement utile lors du débogage dans un environnement multi-cibles (serveur, client). À mon avis, l'utilisation d'une configuration de lancement composée facilite grandement les choses. Lisez ceci section de la documentation officielle pour apprendre à le configurer en gardant à l’esprit les chemins relatifs de vos fichiers serveur et client.

0
Avid Programmer

L’erreur devrait idéalement se lire «le fichier spécifié dans l’attribut du programme n’existe pas», car c’est ce qui se passe. Depuis le VSCode 1.30.2, il vous montre le chemin avec l'erreur.

Dans mon cas, j'avais "program": "${workspaceFolder}\\${file}" donc le chemin était quelque chose comme c:\dir\c:\dir\file.js 

J'ai corrigé cela en supprimant ${workspaceFolder} car je voulais pouvoir déboguer des fichiers individuels.

0
Alex Wachira

J'ai eu le même problème. Dans mon cas, mon launch.json avait la ligne suivante

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

Mon code actif que j'ai essayé de déboguer se trouvait dans app_v2.js. Je l'ai donc mis à jour et le débogage a fonctionné.

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

J'avais la même question et il m'a fallu quelques heures pour le comprendre. Ce que j'ai essentiellement fait, c'est que j'ai supprimé le dossier après ${workspaceFolder}

Le format était ${workspaceFolder}/xxxx\\folder\\subfolder\\subfolderso en supprimant ce qui se trouvait après le "dossier de travail" et en démarrant mon chemin à partir de la double barre oblique inversée, cela a été résolu 

0
Mjyousse