"Attribute 'program' does not exist" for basic node.js project

node.jsVisual Studio-Code

node.js Problem Overview


I created simple node.js application (source code from here 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);

And clicked VSCode generated 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
        }
    ]
}

And still when launched I see:

> Attribute 'program' does not exist.

Can anybody help what's wrong?

node.js Solutions


Solution 1 - node.js

I believe that you need ${workspaceRoot}/server.js, not ${workspaceRoot}/app.js for program. The code you're using doesn't have an app.js, that's what that (poorly worded) error is telling you.

Solution 2 - node.js

I also encountered this issue because of where VS Code put the .vscode directory containing the launch.json file. It put it up one directory so I had to add the directory to the path as defined in the launch.json file:

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

I hope this helps.

Solution 3 - node.js

Another issue I ran into is a path was configured Using\\Backslashes\\Like\\So and worked fine on Windows, but on Mac it gave the above error.

(Solution: changed to /)

Solution 4 - node.js

The error is saying that the path to your code was wrong.

VSCode defines the parent directory of its configuration file ".vscode/launch.json" as "${workspaceRoot}" or "${workspaceFolder}".

So, for example, if you want to run file "myproject/subfolder/main.js", you should configure your "myproject/.vscode/launch.json" as follows:

"program": "${workspaceRoot}/subfolder/main.js"

Note that configuring

"program": "${workspaceRoot}/myproject/subfolder/main.js"

is a mistake and will cause error "Attribute 'program' does not exist".

Solution 5 - node.js

I wasted a few hours today trying to figure this problem out. What worked for me was deleting the existing launch.json and running the application, which prompts you to select an enviroment, which in my case was Node. This created a new launch.json in which I updated the program path.

Solution 6 - node.js

The error should ideally read 'file specified in program attribute does not exist' because that is what is happening. As of VSCode 1.30.2, it does show you the path along with the error.

In my case I had "program": "${workspaceFolder}\\${file}" so the path was something like c:\dir\c:\dir\file.js

I corrected this by removing ${workspaceFolder} since I wanted to be able to debug individual files.

Solution 7 - node.js

I had the same issue. In my case my launch.json had following line

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

My active code that I tried to debug was in app_v2.js , so I updated it to following, and then debug worked.

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

Solution 8 - node.js

Firstly, read the official document this answers all question you would have about setting the right attributes for different scenarios using launch.json.

Now, to specifically answer this question, the ${workspaceFolder} is basically containing directory of the .vscode directory, which is your project root directory. So, when setting specific files as your debugging program, remember to map the path from the project root directory, or in other words the relative path of the file that is to be set as the debugging program. This can be easily obtained from the IDE (VS Code) by simply right-clicking the file and selecting the Copy Relative Path option. Then proceed to paste this next to the ${workspaceFolder} in the program attribute in your launch.json file, like below, will fix the problem.

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

Replace relative path with your copied relative path as mentioned before Note that I am on a Mac platform. Please use platform appropriate path separators

Alternatively, not specifically using a launch configuration makes sense if it's a not-for-production or a simple app that does not warrant a launch config file. However, if not, it is super useful when debugging in a Multi-target environment (server, client). In my opinion, using a compound launch configuration setup makes things a lot easier. Read this section of the official docs to learn how to set it up keeping in mind the relative paths of your server and client files.

Solution 9 - node.js

I had the same question and took me couple of hours to figure it out. What I basically did was that I deleted the folder after ${workspaceFolder}

The format was ${workspaceFolder}/xxxx\\folder\\subfolder\\subfolder so by deleting what's after the "workspaceFolder" and starting my path from the double backward slash, it did fix it for me.

Solution 10 - node.js

I had the same error, because I was passing the arguments inside "program" attribute like this:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Build -B -p",
            "skipFiles": [
                "<node_internals>/**"
            ],
            "program": "${workspaceFolder}\\app\\build -B -p D:\\apps\\12"
        }
    ]
}

What solved for me was to pass the arguments inside "args" attribute, like this:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Build -B -p",
            "skipFiles": [
                "<node_internals>/**"
            ],
            "program": "${workspaceFolder}\\app\\build",
            "args":["-B", "-pD:\\apps\\12"]
        }
    ]
}

The O.S. was Windows 7.

Solution 11 - node.js

It simply means that when you debug the file the app.js file simply doesn't exist and when you perform debugging it shows the error. Here it my way to fix the problem : simply replace the value of program

"${workspaceRoot}/app.js"

by

"${workspaceFolder}/${fileBasenameNoExtension}.js"

I hope this will solve all of your problems.

Solution 12 - node.js

For the ones who are using Visual Studio 2019, today I was trying Node.js in the "master" VS2019. I moved server.ts to the src folder so that my js output would be in lib folder.

After that I tarted getting that message. Here are the changes I made in my project file to have it working.

<StartupFile>lib\server.js</StartupFile>
<WorkingDirectory>lib</WorkingDirectory>
<OutputPath>lib</OutputPath>

I hope this is not out of topic, it could help VS IDE users.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionValeriyView Question on Stackoverflow
Solution 1 - node.jsmdickinView Answer on Stackoverflow
Solution 2 - node.jsColinView Answer on Stackoverflow
Solution 3 - node.jsripper234View Answer on Stackoverflow
Solution 4 - node.jsuser3179473View Answer on Stackoverflow
Solution 5 - node.jsAwad MaharoofView Answer on Stackoverflow
Solution 6 - node.jsAlex WachiraView Answer on Stackoverflow
Solution 7 - node.jsOrhan CelikView Answer on Stackoverflow
Solution 8 - node.jsAvid ProgrammerView Answer on Stackoverflow
Solution 9 - node.jsMjyousseView Answer on Stackoverflow
Solution 10 - node.jsCarlos NantesView Answer on Stackoverflow
Solution 11 - node.jsRaman SharmaView Answer on Stackoverflow
Solution 12 - node.jsFabrice TView Answer on Stackoverflow