"El atributo 'programa' no existe" para el proyecto básico de node.js

82

Creé una aplicación simple node.js (código fuente desde aquí 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);

Y haga clic en launch.json generado por 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
        }
    ]
}

Y aún cuando lo lanzo veo:

El atributo 'programa' no existe.

¿Alguien puede ayudar en lo que está mal?

Valeriy
fuente

Respuestas:

73

Creo que necesitas ${workspaceRoot}/server.js, no ${workspaceRoot}/app.jspara program. El código que estás usando no tiene app.js, eso es lo que te dice ese error (mal redactado).

mdickin
fuente
Lo anterior es la respuesta correcta. Es la "program": "${workspaceRoot}/app.js",línea que causa el error; el archivo js al que hace referencia esta línea no existe.
Yiling
No creo que esto sea correcto. No hay nada malo con app.js. No lo probé, pero la respuesta de Colin a continuación es lo que siempre hago.
Tom Stickel
Esta respuesta fue correcta para la pregunta dada. La publicación de blog que aparece en la pregunta utiliza el archivo server.jscomo archivo de inicio. Quizás una mejor respuesta hubiera sido "el programatributo apunta al archivo incorrecto"
mdickin
28

También encontré este problema debido a que VS Code colocó el directorio .vscode que contiene el archivo launch.json. Lo colocó en un directorio, así que tuve que agregar el directorio a la ruta como se define en el archivo launch.json:

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

Espero que esto ayude.

Colin
fuente
Creo señor que tiene la respuesta correcta ya que me encontré con este problema nuevamente en una computadora diferente y olvidé lo que hice antes y vi su respuesta y recordé que esto es correcto.
Tom Stickel
¡Sí, esto funcionó! Esto sucede si tiene su proyecto de nodo en una subcarpeta (myDir) y no en la raíz y la carpeta .vscode (bajo la cual está presente launch.json) se crea en la raíz.
Ajay Chebbi
14

Otro problema con el que me encontré es que se configuró una ruta Using\\Backslashes\\Like\\Soy funcionó bien en Windows, pero en Mac dio el error anterior.

(Solución: cambiado a /)

destripador234
fuente
1
Sí, esto fue todo para mí. Barras invertidas en Windows, pero necesarias barras diagonales en Raspbian.
John Mills
4

El error dice que la ruta a su código era incorrecta.

VSCode define el directorio principal de su archivo de configuración ".vscode / launch.json" como "$ {workspaceRoot}" o "$ {workspaceFolder}".

Entonces, por ejemplo, si desea ejecutar el archivo "myproject / subfolder / main.js", debe configurar su "myproject / .vscode / launch.json" de la siguiente manera: "program": "${workspaceRoot}/subfolder/main.js"

Tenga en cuenta que la configuración "program": "${workspaceRoot}/myproject/subfolder/main.js" es un error y provocará el error "El atributo 'programa' no existe".

usuario3179473
fuente
3

Hoy desperdicié algunas horas tratando de resolver este problema. Lo que funcionó para mí fue eliminar el launch.json existente y ejecutar la aplicación, lo que le pide que seleccione un entorno, que en mi caso fue Node. Esto creó un nuevo launch.json en el que actualicé la ruta del programa.

Awad Maharoof
fuente
2

Idealmente, el error debería leer 'el archivo especificado en el atributo del programa no existe' porque eso es lo que está sucediendo. A partir de VSCode 1.30.2, le muestra la ruta junto con el error.

En mi caso lo hice "program": "${workspaceFolder}\\${file}"así que el camino fue algo así comoc:\dir\c:\dir\file.js

Corregí esto eliminando ${workspaceFolder}ya que quería poder depurar archivos individuales.

Alex Wachira
fuente
1

Tuve el mismo problema. En mi caso, mi launch.json tenía la siguiente línea

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

Mi código activo que intenté depurar estaba en app_v2.js, así que lo actualicé al siguiente y luego funcionó la depuración.

"program": "${workspaceFolder}\\app_v2.js"
Orhan Celik
fuente
1

En primer lugar, lea el documento oficial que responde a todas las preguntas que tendría sobre la configuración de los atributos correctos para diferentes escenarios utilizandolaunch.json .

Ahora, para responder específicamente a esta pregunta, ${workspaceFolder}básicamente contiene el directorio del .vscodedirectorio, que es el directorio raíz de su proyecto. Por lo tanto, cuando configure archivos específicos como su programa de depuración, recuerde asignar la ruta desde el directorio raíz del proyecto, o en otras palabras, la ruta relativa del archivo que se configurará como programa de depuración. Esto se puede obtener fácilmente del IDE (Código VS) simplemente haciendo clic derecho en el archivo y seleccionando la Copy Relative Pathopción. Luego proceda a pegar esto junto a $ {workspaceFolder} en el atributo del programa en su launch.jsonarchivo, como se muestra a continuación, solucionará el problema.

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

Reemplace la ruta relativa con la ruta relativa copiada como se mencionó anteriormente Tenga en cuenta que estoy en una plataforma Mac. Utilice separadores de ruta adecuados para la plataforma

Alternativamente, no usar específicamente una configuración de inicio tiene sentido si se trata de una aplicación que no es para producción o simple que no garantiza un archivo de configuración de inicio. Sin embargo, si no es así, es muy útil cuando se depura en un entorno de múltiples objetivos (servidor, cliente). En mi opinión, usar una configuración de lanzamiento compuesta facilita mucho las cosas. Lea esta sección de los documentos oficiales para aprender cómo configurarlo teniendo en cuenta las rutas relativas de los archivos de su servidor y cliente.

Programador ávido
fuente
0

Tenía la misma pregunta y me tomó un par de horas resolverla. Lo que hice básicamente fue eliminar la carpeta después${workspaceFolder}

El formato fue ${workspaceFolder}/xxxx\\folder\\subfolder\\subfolder así al eliminar lo que está después de la "carpeta de espacio de trabajo" e iniciar mi ruta desde la barra doble hacia atrás, lo solucionó.

Mjyousse
fuente
0

Tuve el mismo error, porque estaba pasando los argumentos dentro del atributo "programa" como este:

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

Lo que me resolvió fue pasar los argumentos dentro del atributo "args", así:

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

El sistema operativo era Windows 7.

Carlos nantes
fuente
0

Simplemente significa que cuando depura el archivo, el archivo app.js simplemente no existe y cuando realiza la depuración, muestra el error. Aquí está mi manera de solucionar el problema: simplemente reemplace el valor del programa

"${workspaceRoot}/app.js"

por

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

Espero que esto resuelva todos sus problemas.

Raman Sharma
fuente
0

Para los que están usando Visual Studio 2019 , hoy estaba probando Node.js en el VS2019 "maestro". Me mudé server.tsa la srccarpeta para que mi jssalida estuviera en la libcarpeta.

Después de eso, comencé a recibir ese mensaje. Estos son los cambios que hice en mi archivo de proyecto para que funcione.

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

Espero que esto no esté fuera de tema, podría ayudar a los usuarios de VS IDE.

Fabrice T
fuente