VS Code自动npm构建失败,并显示“找不到npm命令”

时间:2019-06-07 11:45:10

标签: node.js npm visual-studio-code

根据docs,它应该可以工作。当我按Ctrl-Shift-B组合键时,确实得到npm: build,如果运行,则在终端中得到npm command not found。但是,手动运行npm run build是可行的。

我正在使用nvm。一些相关的输出:

 ~  which node
/home/gt/.nvm/versions/node/v10.15.3/bin/node
 ~  which npm 
/home/gt/.nvm/versions/node/v10.15.3/bin/npm
 ~  echo $NODE_PATH
/home/gt/.nvm/versions/node/v10.15.3/bin/node

这可能是什么原因?以及如何解决?

6 个答案:

答案 0 :(得分:1)

该问题可能是因为npm不在VS Code的路径中(可能是/usr/bin)。但是,您可以创建自定义生成任务并指定路径。在.vscode目录中,创建一个tasks.json文件。将内容放在文件下面。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "npm:build",
            "type": "shell",
            "group": { "kind": "build", "isDefault": true },
            "command": "/home/gt/.nvm/versions/node/v10.15.3/bin/npm run build"
        }
    ]
}

组设置使该任务成为VS Code中的默认任务和构建样式任务。因此,它使它可以从ctrl+shift+b启动。

VS Code JS Build Docs

答案 1 :(得分:1)

自我回答,因为我终于找到了我需要做的两件事:

  1. 按照one answer中的说明创建task.json:

    {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "npm:build",
                "type": "shell",
                "group": { "kind": "build", "isDefault": true },
                "command": "/home/gt/.nvm/versions/node/v10.15.3/bin/npm run build"
            }
        ]
    }
    

    此后,我又遇到另一个错误:"/usr/bin/env: node: No such file or directory"

  2. 然后我发现了这个github thread,所以我根据建议创建了符号链接:

    $ sudo ln -s /home/gt/.nvm/versions/node/v10.15.3/bin/node /usr/bin/node
    

ctrl+shift+b快捷方式现在可以使用。请注意,您所用的源参数可以从which node中获取。

答案 2 :(得分:1)

我正在使用nvm并编写了一个包装器脚本,该脚本从.nvmrc中读取节点版本。这避免了在多个位置对特定节点版本进行硬编码。使用settings.json设置为terminal.integrated.automationShell.<os>中的所有shell命令配置了包装脚本。

#!/bin/bash

set -e

if [[ "$2" == nvm* ]]; then
    export NODE_VERSION=v$(cat .nvmrc)
    if [ -z "$NODE_VERSION" ]; then
        echo "$(pwd)/.nvmrc does not exist or is empty"
        exit 1
    fi
    CLEAN_CMD=$(echo $2 | sed -e 's/nvm/npm/g')

    /bin/bash -c "~/.nvm/nvm-exec $CLEAN_CMD"
else
    /bin/bash -c $@
fi

然后,任务可以使用nvm <command>命令使用正确的节点版本:

    {
        "type": "shell",
        "command": "nvm run compile",
        "label": "npm-compile",            
        "problemMatcher": "$tsc",
        "isBackground": false,  
        "presentation": {
            "reveal": "always"
        },
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }

还有一个要点提供了更多信息:https://gist.github.com/fvclaus/540c08921ba884fef959053c4f974bfc

答案 3 :(得分:1)

我们通过获取设置了NVM的文件然后运行npm命令来解决了这个问题。

示例:

"command": "source scripts/nvm && npm run develop",
# ./scripts/nvm

# This is for users who don't have a global Node.js installation but instead
# rely on NVM. This file is sourced when running build tasks in non-login
# shells.

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

或者,您可以在此处获取〜/ .bash_profile(或任何其他文件)。我们认为这比硬编码nvm的npm路径更好。

答案 4 :(得分:0)

我认为您不在正确的目录中。

  

尝试以下方法。

     

从任何组件打开任何ts / html文件,执行相同操作   (Ctrl + Shift + B)。

     

可能会奏效,对我来说也奏效。

仍然遇到相同的问题,请共享快照。

答案 5 :(得分:0)

尝试文件->打开文件夹,打开您的npm项目文件夹并从此处运行构建命令。如果失败,则可能需要更新task.json以使其类似于

{
  "version": "0.0.1",
  "tasks": [
    {
      "label": "npm:build",
      "type": "shell",
      "group": { "isDefault": true,"kind": "build",  },
      "command": "npm run build"
    }
  ]
}