„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?

Valeriy
źródł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.

mdickin
źródło
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.

Colin
źródło
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 /)

zrywak234
źródło
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”.

user3179473
źródło
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.

Awad Maharoof
źródło
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.

Alex Wachira
źródło
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"
Orhan Celik
źródło
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.

Avid Programmer
źródło
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.

Mjyousse
źródło
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.

Carlos Nantes
źródło
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.

Raman Sharma
źródło
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.

Fabrice T
źródło