关于reactjs:” $ npm_execpath”未被识别为内部或外部命令,程序或可执行批处理文件

“$npm_execpath” isn't recognized as an internal or external command, program, or executable batch file

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

1
2
3
4
5
6
7
8
 "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"
  },

我正在尝试如下运行" build "脚本:

yarn build / npm run build

但是在每个错误中都显示错误:

"$npm_execpath" isn't recognized as an internal or external command, program, or executable batch file

希望您能帮助我。预先感谢。


引用环境变量:

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

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

    1
    2
    $npm_execpath
    ^

  • 在Windows上,在两侧均使用百分号对其进行引用。例如:

    1
    2
    %npm_execpath%
    ^            ^

检查环境变量是否存在

首先,通过在package.json的scripts部分中临时添加一个新脚本来检查npm_execpath变量是否存在。让我们将脚本命名为test-var,然后根据您正在运行的OS对其进行如下定义:

  • 对于Windows(cmd)

    如果您正在运行Windows,请按以下方式定义脚本:

    1
    2
    3
    4
    "scripts": {
     "test-var":"echo %npm_execpath%",
      ...
    }
  • 对于macOS / Linux(bash)

    如果您正在运行macOS / Linux(即bash),请按以下方式定义脚本:

    1
    2
    3
    4
    "scripts": {
     "test-var":"echo $npm_execpath",
      ...
    }
  • 然后通过运行以下命令来调用脚本:npm run test-varyarn test-var

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

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

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

    C:\\Program Files\
    odejs\
    ode_modules\
    pm\\bin\
    pm-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的所有实例替换为:

    1
    node "%npm_execpath%"

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

    1
    2
    3
    4
    "scripts": {
     "typecheck:watch":"node "%npm_execpath%" run typecheck -- --watch",
      ...
    }

    在上面的示例中,我们显式地利用nodejs调用npm_execpath变量。我们还将npm_execpath变量放在百分号(即%...%)之间,并将它们也package在JSON转义的双引号(即"...")中。

  • 跨平台

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

    对于适用于跨平台(Windows,macOS,Linux)的单一语法,我建议安装并使用yarpm。在这种情况下,用yarpm

    替换所有脚本中的$npm_execpath的所有实例。

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

    1
    2
    3
    4
    "scripts": {
     "typecheck:watch":"yarpm run typecheck -- --watch",
      ...
    }