To reproduce:


  • 使用我的Windows 10 PC打开VSCode

  • 创建Hello World js文件

  • 从VSCode调试器视图启动为节点应用程序

产生错误: Cannot find runtime 'node' on PATH

Given:


  • 我的launch.json:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Build",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/build.js",
            "stopOnEntry": false,
            "args": [],
            "cwd": "${workspaceRoot}",
            "env": {
                "NODE_ENV": "development"
            },
            "console": "internalConsole",
            "sourceMaps": false
        }
    ]
}
  • 我已将nodejs移动到我的PATH变量的2048个字符内 .

  • 我已重新启动计算机 .

  • 我重新启动了VSCode .

从CMD和集成终端(sysnative / cmd):

  • PATH 包含 D:/Program Files/nodejs

  • where node 返回 D:/Program Files/nodejs/node.exe

来自Google Developer Console:

  • process.env.PATH 包含 D:/Program Files/nodejs

  • 运行以下代码生成 D:/Program Files/nodejs/node.exe

(function(){
    const cp = require('child_process');
    const env = Object.assign({}, process.env, {
        ATOM_SHELL_INTERNAL_RUN_AS_NODE: '1',
        ELECTRON_NO_ATTACH_CONSOLE: '1'
    });
    const result = cp.spawnSync('where', ['node'], {
        detached: true,
        stdio: ['ignore', 'pipe', process.stderr],
        env,
        encoding: 'utf8'
    });

    console.log(result.stdout);
})();

Additional


  • .NET-Core应用程序的行为相同 - 终端和cmd工作, dotnet 在路径上,但从VSCode调试器视图启动无法在路径上找到CLI工具 .

  • 附加到现有的 dotnet 进程会产生不同的错误: Please set up the launch configuration file for your application. command 'csharp.listProcess' not found

  • 不确定是否相关,但跳转到声明的F12没有响应 .

Update

我一直在做一些调试,看起来像下面的代码生成 Command Failed: echo test

require('child_process')
.execSync('echo test', {cwd: workspaceRoot, env: process.env});

在引擎盖下,它结束了呼唤

require('child_process')
.spawnSync('cmd', ['/s', '/c', '"echo test"'], {cwd: workspaceRoot, env: process.env});

它在引擎盖下构建的命令是 C:\Windows\System32\cmd.exe /s /c "echo test" ,我测试过并确实打印 test .

spawnSync 调用显示退出代码为 3221225477 .

实际上,每次我使用child_process通过cmd执行某些操作时,退出代码为3221225477.不过,我可以让spawnSync启动除cmd之外的其他进程 . 这有效:

require('child_process')
.spawnSync('node', ['build.js'], {cwd: workspaceRoot, env: process.env});