“Атрибут 'програма' не існує 'для базового проекту 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, на який посилається цей рядок, не існує.
Ілін

Я не вірю, що це правильно. З app.js нічого поганого я не пробував, але відповідь Коліна нижче - це те, що я завжди роблю.
Том Стікель,

Ця відповідь була правильною для даного питання. Допис у блозі, перерахований у запитанні, використовує файл server.jsяк файл запуску. Можливо, кращою відповіддю було б " programатрибут вказує на неправильний файл"
mdickin

28

Я також зіткнувся з цією проблемою через те, куди VS Code помістив каталог .vscode, що містить файл launch.json. Це поставило його в один каталог, тому мені довелося додати каталог до шляху, як визначено у файлі launch.json:

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

Сподіваюся, це допоможе.


Я вважаю, сер, що у вас є правильна відповідь, оскільки я знову стикався з цим питанням на іншому комп’ютері і забув, що робив раніше, побачив вашу відповідь і пам’ятав, що це правильно.
Том Стікель,

Так, це спрацювало! Це трапляється, якщо ваш проект вузла знаходиться в підпапці (myDir), а не в кореневій папці, а в кореневій папці .vscode (у якій присутній launch.json).
Аджай Чеббі

14

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

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


1
Так, це було для мене. Коса коса риса у Windows, але потрібна коса коса риса на Raspbian.
Джон Міллс,

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), просто клацнувши правою кнопкою миші файл та вибравши 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 у "master" 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.