«Атрибут« программа »не существует» для базового проекта node.js


83

Я создал простое приложение node.js (исходный код отсюда 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);

И щелкнул VSCode сгенерированный 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
        }
    ]
}

И все же при запуске вижу:

Атрибут "программа" не существует.

Кто-нибудь может помочь в том, что случилось?

Ответы:


73

Я считаю, что нужно ${workspaceRoot}/server.js, а не ${workspaceRoot}/app.jsдля program. В используемом вами коде нет app.js, о чем вам говорит эта (плохо сформулированная) ошибка.


Вышеупомянутый правильный ответ. Это "program": "${workspaceRoot}/app.js",строка, вызывающая ошибку; файл js, на который ссылается эта строка, не существует.
Yiling

Я не верю, что это правильно. С app.js все в порядке. Я не пробовал, но ответ Колина ниже - это то, что я всегда делаю.
Tom Stickel

Этот ответ был правильным для данного вопроса. Сообщение в блоге, указанное в вопросе, использует файл server.jsв качестве файла запуска. Возможно, лучшим ответом было бы « programатрибут указывает не на тот файл»
mdickin

28

Я также столкнулся с этой проблемой из-за того, что VS Code поместил каталог .vscode, содержащий файл launch.json. Он поместил его в один каталог, поэтому мне пришлось добавить каталог по пути, указанному в файле launch.json:

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

Надеюсь, это поможет.


Я считаю, сэр, что у вас есть правильный ответ, поскольку я снова столкнулся с этой проблемой на другом компьютере и забыл, что я делал раньше, увидел ваш ответ и вспомнил, что это правильно.
Tom Stickel

Да, это сработало! Это происходит, если у вас есть проект узла в подпапке (myDir), а не в корне, а папка .vscode (в которой находится launch.json) создается в корне.
Аджай Чебби

14

Еще одна проблема, с которой я столкнулся, - это путь, который был настроен Using\\Backslashes\\Like\\Soи отлично работал в Windows, но на Mac он дал указанную выше ошибку.

(Решение: изменено на /)


1
Да, это было для меня. Обратные косые черты в Windows, но нужны прямые косые черты в Raspbian.
John Mills

4

Ошибка говорит, что путь к вашему коду был неправильным.

VSCode определяет родительский каталог своего файла конфигурации ".vscode / launch.json" как "$ {workspaceRoot}" или "$ {workspaceFolder}".

Так, например, если вы хотите запустить файл «myproject / subfolder / main.js», вам следует настроить «myproject / .vscode / launch.json» следующим образом: "program": "${workspaceRoot}/subfolder/main.js"

Обратите внимание, что настройка "program": "${workspaceRoot}/myproject/subfolder/main.js" является ошибкой и приведет к ошибке «Атрибут 'программа' не существует».


3

Сегодня я потратил несколько часов, пытаясь разобраться в этой проблеме. У меня сработало удаление существующего файла launch.json и запуск приложения, которое предлагает вам выбрать среду, которой в моем случае был Node. Это создало новый файл launch.json, в котором я обновил путь к программе.


2

В идеале ошибка должна читаться как «файл, указанный в атрибуте программы, не существует», потому что именно это и происходит. Начиная с VSCode 1.30.2, он показывает путь вместе с ошибкой.

В моем случае у меня было "program": "${workspaceFolder}\\${file}"так, что путь был что-то вродеc:\dir\c:\dir\file.js

Я исправил это, удалив, ${workspaceFolder}так как хотел иметь возможность отлаживать отдельные файлы.


1

Я была такая же проблема. В моем случае у моего launch.json была следующая строка

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

Мой активный код, который я пытался отладить, находился в app_v2.js, поэтому я обновил его до следующего, а затем отладка сработала.

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

1

Во-первых, прочтите официальный документ, который отвечает на все ваши вопросы о настройке правильных атрибутов для разных сценариев с использованиемlaunch.json .

Теперь, чтобы конкретно ответить на этот вопрос, в ${workspaceFolder}основном это каталог .vscodeкаталога, который является корневым каталогом вашего проекта. Таким образом, при установке определенных файлов в качестве программы отладки не забудьте сопоставить путь из корневого каталога проекта или, другими словами, относительный путь к файлу, который должен быть установлен в качестве программы отладки. Это можно легко получить из IDE (VS Code), просто щелкнув файл правой кнопкой мыши и выбрав Copy Relative Pathпараметр. Затем вставьте это рядом с $ {workspaceFolder} в атрибут программы в вашем launch.jsonфайле, как показано ниже, устранит проблему.

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

Замените относительный путь вашим скопированным относительным путем, как упоминалось ранее. Обратите внимание, что я использую платформу Mac. Используйте разделители путей, соответствующие платформе

В качестве альтернативы, не использовать конфигурацию запуска специально, если это не производственное приложение или простое приложение, не требующее наличия файла конфигурации запуска. Однако в противном случае это очень полезно при отладке в многоцелевой среде (сервер, клиент). На мой взгляд, использование составной настройки конфигурации запуска значительно упрощает задачу. Прочтите этот раздел официальной документации, чтобы узнать, как его настроить, учитывая относительные пути к файлам вашего сервера и клиента.


0

У меня был тот же вопрос, и мне потребовалось несколько часов, чтобы разобраться в нем. По сути, я удалил папку после${workspaceFolder}

Формат был ${workspaceFolder}/xxxx\\folder\\subfolder\\subfolder таким: удалив то, что находится после «workspaceFolder» и начав мой путь с двойной обратной косой черты, он исправил это для меня.


0

У меня была такая же ошибка, потому что я передавал аргументы внутри атрибута "program" следующим образом:

{
    "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"
        }
    ]
}

Для меня было решено передать аргументы внутри атрибута args, например:

{
    "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"]
        }
    ]
}

ОС была Windows 7.


0

Это просто означает, что когда вы отлаживаете файл, файл app.js просто не существует, и когда вы выполняете отладку, он показывает ошибку. Вот мой способ решить проблему: просто замените значение программы

"${workspaceRoot}/app.js"

по

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

Надеюсь, это решит все ваши проблемы.


0

Для тех, кто использует Visual Studio 2019 , сегодня я пробовал Node.js в «главном» VS2019. Я переместился server.tsв srcпапку, чтобы мой jsвывод находился в libпапке.

После этого я начал получать это сообщение. Вот изменения, которые я внес в свой файл проекта, чтобы он работал.

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

Надеюсь, это не выходит за рамки темы, это может помочь пользователям VS IDE.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.