„Program” atrybutu nie istnieje ”dla podstawowego projektu node.js.


83

Stworzyłem prostą aplikację node.js (kod źródłowy stąd 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);

I kliknąłem plik launch.json wygenerowany przez VSCode:

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

A po uruchomieniu widzę:

Atrybut „program” nie istnieje.

Czy ktoś może pomóc, co się stało?

Odpowiedzi:


73

Uważam, że potrzebujesz ${workspaceRoot}/server.js, a nie ${workspaceRoot}/app.jsdla program. Kod, którego używasz, nie ma pliku app.js, to właśnie mówi ten (słabo sformułowany) błąd.


Powyższe odpowiedzi są poprawne. Jest to "program": "${workspaceRoot}/app.js",linia powodująca błąd; plik js, do którego odwołuje się ten wiersz, nie istnieje.
Yiling

Nie uważam, że to prawda. Nie ma nic złego w app.js. Nie próbowałem, ale odpowiedź Colina poniżej jest tym, co zawsze robię.
Tom Stickel

Ta odpowiedź była poprawna na zadane pytanie. Post na blogu wymieniony w pytaniu używa tego pliku server.jsjako pliku startowego. Być może lepszą odpowiedzią byłoby „ programatrybut wskazuje na niewłaściwy plik”
mdickin

28

Napotkałem również ten problem z powodu miejsca, w którym VS Code umieścił katalog .vscode zawierający plik launch.json. Umieściło go w jednym katalogu, więc musiałem dodać katalog do ścieżki zdefiniowanej w pliku launch.json:

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

Mam nadzieję, że to pomoże.


Uważam, że ma pan poprawną odpowiedź, ponieważ ponownie natrafiłem na ten problem na innym komputerze i zapomniałem, co zrobiłem wcześniej, zobaczyłem twoją odpowiedź i przypomniałem sobie, że jest poprawna.
Tom Stickel

Tak, to zadziałało! Dzieje się tak, jeśli projekt węzła znajduje się w podfolderze (myDir), a nie w katalogu głównym, a folder .vscode (w którym znajduje się plik launch.json) jest tworzony w katalogu głównym.
Ajay Chebbi

14

Innym problemem, na który się natknąłem, jest ścieżka została skonfigurowana Using\\Backslashes\\Like\\Soi działała dobrze w systemie Windows, ale na Macu dała powyższy błąd.

(Rozwiązanie: zmieniono na /)


1
Tak, to było to dla mnie. Ukośniki wsteczne w systemie Windows, ale wymagane ukośniki w przód w Raspbian.
John Mills

4

Błąd mówi, że ścieżka do twojego kodu była nieprawidłowa.

VSCode definiuje katalog nadrzędny swojego pliku konfiguracyjnego „.vscode / launch.json” jako „$ {workspaceRoot}” lub „$ {workspaceFolder}”.

Na przykład, jeśli chcesz uruchomić plik „myproject / subfolder / main.js”, powinieneś skonfigurować swój „myproject / .vscode / launch.json” w następujący sposób: "program": "${workspaceRoot}/subfolder/main.js"

Zauważ, że konfiguracja "program": "${workspaceRoot}/myproject/subfolder/main.js" jest błędem i spowoduje błąd „Atrybut„ program ”nie istnieje”.


3

Zmarnowałem dziś kilka godzin, próbując rozwiązać ten problem. U mnie zadziałało usunięcie istniejącego pliku launch.json i uruchomienie aplikacji, która wyświetla monit o wybranie środowiska, którym w moim przypadku był Node. Stworzyło to nowy plik launch.json, w którym zaktualizowałem ścieżkę programu.


2

Najlepiej byłoby, gdyby błąd brzmiał „plik określony w atrybucie programu nie istnieje”, ponieważ tak właśnie się dzieje. Od wersji VSCode 1.30.2 pokazuje ścieżkę wraz z błędem.

W moim przypadku "program": "${workspaceFolder}\\${file}"tak miałem, więc ścieżka była jakośc:\dir\c:\dir\file.js

Poprawiłem to, usuwając, ${workspaceFolder}ponieważ chciałem mieć możliwość debugowania poszczególnych plików.


1

Miałem ten sam problem. W moim przypadku mój launch.json miał następujący wiersz

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

Mój aktywny kod, który próbowałem debugować, znajdował się w app_v2.js, więc zaktualizowałem go do następującego, a następnie debugowanie działało.

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

1

Po pierwsze, przeczytaj oficjalny dokument, który zawiera odpowiedzi na wszystkie pytania, które możesz mieć na temat ustawiania odpowiednich atrybutów dla różnych scenariuszylaunch.json .

Aby konkretnie odpowiedzieć na to pytanie, w ${workspaceFolder}zasadzie zawiera katalog .vscodekatalogu, który jest katalogiem głównym twojego projektu. Tak więc, ustawiając określone pliki jako program do debugowania, pamiętaj, aby odwzorować ścieżkę z katalogu głównego projektu, czyli innymi słowy, ścieżkę względną pliku, który ma być ustawiony jako program debugujący. Można to łatwo uzyskać z IDE (VS Code), po prostu klikając plik prawym przyciskiem myszy i wybierając Copy Relative Pathopcję. Następnie wkleić to obok $ {workspaceFolder} w atrybucie programu w launch.jsonpliku, jak poniżej, rozwiąże problem.

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

Zastąp ścieżkę względną skopiowaną ścieżką względną, jak wspomniano wcześniej. Zauważ, że pracuję na platformie Mac. Użyj separatorów ścieżek odpowiednich dla platformy

Alternatywnie, nie używanie konkretnie konfiguracji uruchamiania ma sens, jeśli jest to aplikacja nieprzeznaczona do produkcji lub prosta aplikacja, która nie gwarantuje uruchomienia pliku konfiguracyjnego. Jeśli jednak nie, jest to bardzo przydatne podczas debugowania w środowisku z wieloma celami (serwer, klient). Moim zdaniem użycie złożonej konfiguracji uruchamiania znacznie ułatwia sprawę. Przeczytaj tę sekcję oficjalnej dokumentacji, aby dowiedzieć się, jak to skonfigurować, pamiętając o względnych ścieżkach serwera i plików klienta.


0

Miałem to samo pytanie i zajęło mi to kilka godzin. Zasadniczo zrobiłem, że później usunąłem folder${workspaceFolder}

Format był ${workspaceFolder}/xxxx\\folder\\subfolder\\subfolder taki, usuwając to, co znajduje się za „workspaceFolder” i rozpoczynając moją ścieżkę od podwójnego ukośnika w tył, naprawił to za mnie.


0

Miałem ten sam błąd, ponieważ przekazywałem argumenty wewnątrz atrybutu „program” w następujący sposób:

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

Rozwiązaniem dla mnie było przekazanie argumentów wewnątrz atrybutu „args”, na przykład:

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

System operacyjny to Windows 7.


0

Oznacza to po prostu, że podczas debugowania pliku plik app.js po prostu nie istnieje, a podczas debugowania wyświetla błąd. Tutaj jest mój sposób na rozwiązanie problemu: po prostu zastąp wartość programu

"${workspaceRoot}/app.js"

przez

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

Mam nadzieję, że to rozwiąże wszystkie Twoje problemy.


0

Dla tych, którzy używają Visual Studio 2019 , dzisiaj wypróbowałem Node.js w „głównym” VS2019. Przeniosłem server.tssię do srcfolderu, aby moje jsdane wyjściowe były w libfolderze.

Potem zacząłem otrzymywać tę wiadomość. Oto zmiany, które wprowadziłem w pliku projektu, aby działał.

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

Mam nadzieję, że to nie jest poza tematem, mogłoby to pomóc użytkownikom VS IDE.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.