【问题标题】:VS Code automatic npm build fails with "npm command not found"VS Code 自动 npm 构建失败并显示“未找到 npm 命令”
【发布时间】:2019-06-07 11:45:10
【问题描述】:

根据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

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

【问题讨论】:

  • 您使用的是默认任务吗?还是您创建了tasks.json
  • 我没有创建tasks.json,但是根据docs,直接向上ctrl shift b 应该可以工作。

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


【解决方案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 路径更好。

【讨论】:

    【解决方案2】:

    我正在使用 nvm 并编写了一个从 .nvmrc 读取节点版本的包装脚本。这避免了在多个地方对特定节点版本进行硬编码。使用terminal.integrated.automationShell.<os> 设置为settings.json 中的所有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】:

      问题可能是因为 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

      【讨论】:

        【解决方案4】:

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

        1. 按照one answer 中的说明创建一个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"
                  }
              ]
          }
          

          在此之后我又收到一条错误消息:"/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 获得。

        【讨论】:

        • 你试过没有tasks.json文件吗?我的猜测是,如果这是一个路径问题,无论如何它都会被符号链接解决。将来,您可以在ln 命令中使用which nodeln -s "$(which node)" /usr/bin/node
        • @technogeek1995 嘿,谢谢,但如果没有 tasks.json 文件,它就无法工作,而是说找不到 npm 命令。
        【解决方案5】:

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

        试试下面的方法。

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

        它可能会起作用,它对我有用。

        您仍然面临同样的问题,请分享快照。

        【讨论】:

        • 我认为在正确的目录中。我的 package.json 和 package-lock.json 在顶层目录中,与 node_modules 和 gulpfile.js 一起
        【解决方案6】:

        尝试文件 -> 打开文件夹,打开你的 npm 项目文件夹并从那里运行你的构建命令。如果失败,您可能需要更新您的 tasks.json 以使其看起来类似于

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

        【讨论】:

          猜你喜欢
          • 2017-11-28
          • 1970-01-01
          • 1970-01-01
          • 2014-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-07
          • 2018-10-26
          相关资源
          最近更新 更多