“$npm_execpath”未被识别为内部或外部命令、程序或可执行批处理文件

Posted

技术标签:

【中文标题】“$npm_execpath”未被识别为内部或外部命令、程序或可执行批处理文件【英文标题】:"$npm_execpath" isn't recognized as an internal or external command, program, or executable batch file 【发布时间】:2019-05-21 20:16:13 【问题描述】:

标题是正在发生的错误。我在 package.json 中创建脚本,但我想动态使用 npmyarn。我已经读过可以为此使用一个名为“$npm_execpath”的环境变量,但它不适用于我的配置。这是 package.json 部分的示例:

  "scripts": 
    "start": "run-p start:jsonserver start:dev",
    "start:dev": "node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js --config ./config/webpack/webpack.standalone.dev.js --open",
    "start:prod": "webpack-dev-server --config ./config/webpack/webpack.standalone.prod.js",
    "start:container": "webpack-dev-server --host 0.0.0.0 --port 4555",
    "start:jsonserver": "node ../Testing.GtP.UI.MockServer/server.js",
    "build:dev": "npm run build:standalone:dev && npm run build:module:dev"
  ,

我正在尝试按如下方式运行“构建”脚本:

yarn build / npm run build

但在每个都显示错误:

我希望你能帮助我。提前致谢。

【问题讨论】:

【参考方案1】:

引用环境变量:

每个操作系统使用不同的语法引用环境变量:

*nix 操作系统(例如 macOS 和 Linux)上,它们使用美元符号前缀来引用。例如:

$npm_execpath
^

在 Windows 上,它们在两边都使用百分号来引用。例如:

%npm_execpath%
^            ^

检查环境变量是否存在

首先,通过临时将新脚本添加到 package.jsonscripts 部分来检查 npm_execpath 变量是否存在。让我们将脚本命名为 test-var 并根据您运行的操作系统将其定义如下:

    适用于 Windows (cmd)

    如果您运行的是 Windows,请按如下方式定义脚本:

    "scripts": 
      "test-var": "echo %npm_execpath%",
      ...
    
    

    对于 macOS/Linux (bash)

    如果您运行的是 macOS/Linux(即 bash),则按如下方式定义脚本:

    "scripts": 
      "test-var": "echo $npm_execpath",
      ...
    
    

然后通过运行以下命令调用脚本:npm run test-varyarn test-var

如果存在npm_execpath 变量,您应该会看到打印到控制台的路径。例如,在 macOS 上运行 npm run test-var 将打印如下内容:

/usr/local/lib/node_modules/npm/bin/npm-cli.js

在 Windows 上,它将打印类似于以下内容的内容:

C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js

它还应该在运行yarn test-var 时打印一个路径。但是,路径指向的文件将是对yarn.js 的引用。例如,在 macOS 上,它将打印如下内容:

/Users/someone/.yarn/bin/yarn.js

注意:如果在运行上述命令时没有向控制台打印路径,请考虑重新安装 yarn 和/或 npm。


解决方案:

    对于 macOS/Linux (bash)

    按照您目前的做法使用$npm_execpath 变量。

    对于 Windows (cmd)

    所有脚本中$npm_execpath所有个实例替换为:

    node \"%npm_execpath%\"
    

    例如,您当前名为 typecheck:watch 的脚本将被重新定义为:

    "scripts": 
      "typecheck:watch": "node \"%npm_execpath%\" run typecheck -- --watch",
      ...
    
    

    在上面的例子中,我们明确地利用 nodejs 来调用npm_execpath 变量。我们还将npm_execpath 变量放在百分号之间(即%...%),并将它们也包裹在JSON 转义双引号中(即\"...\")。

    跨平台

    必须为每个操作系统使用不同的语法来引用变量并不理想,特别是如果您希望同时支持 Windows 和 *nix 操作系统。

    对于跨平台工作的单一语法(WindowsmacOSLinux),我建议安装和使用yarpm。在这种情况下,将 all 脚本中 $npm_execpathall 个实例替换为 yarpm

    例如,您当前名为 typecheck:watch 的脚本将被重新定义为:

    "scripts": 
      "typecheck:watch": "yarpm run typecheck -- --watch",
      ...
    
    

【讨论】:

非常感谢@RobC!那太棒了!我没有意识到,但我在 Windows 中使用了 Linux 环境变量:S 哈哈哈

以上是关于“$npm_execpath”未被识别为内部或外部命令、程序或可执行批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

CMD: '■m' 未被识别为内部或外部命令

PHP:'java' 未被识别为内部或外部命令

VS2012:'nmake' 未被识别为内部或外部命令

我收到此错误“'npx' 未被识别为内部或外部命令,” [重复]

tsc 未被识别为内部或外部命令

cat 未被识别为内部或外部命令