"$npm_execpath" 未被识别为内部或外部命令、程序或可执行批处理文件
"$npm_execpath" isn't recognized as an internal or external command, program, or executable batch file
标题是发生的错误。我在 package.json 中创建了脚本,但我想动态地使用 npm
或 yarn
。我读过可以为此使用名为“$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
但是在每一个都显示错误:
"$npm_execpath" isn't recognized as an internal or external command, program, or executable batch file
希望你能帮助我。提前致谢。
引用环境变量:
每个操作系统使用不同的语法引用环境变量:
在 *nix 操作系统上,例如 macOS 和 Linux,它们是使用美元符号前缀引用的。例如:
$npm_execpath
^
在 Windows 上,它们在两边都使用百分号引用。例如:
%npm_execpath%
^ ^
检查环境变量是否存在
首先,通过在 package.json 的 scripts
部分临时添加一个新脚本来检查 npm_execpath
变量是否存在。让我们将脚本命名为 test-var
并根据您 OS 运行:
对其进行如下定义
对于Windows (cmd)
如果你是运行 Windows定义脚本如下:
"scripts": {
"test-var": "echo %npm_execpath%",
...
}
对于macOS/Linux (bash)
如果你是运行macOS/Linux(即bash)那么定义脚本如下:
"scripts": {
"test-var": "echo $npm_execpath",
...
}
然后通过 运行 以下命令调用脚本:npm run test-var
和 yarn 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 and/or 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 转义双引号中(即 \"...\"
)。
跨平台
必须根据 OS 使用不同的语法来引用变量并不理想,特别是如果您想要同时支持 Windows 和 *nix 操作系统。
适用于跨平台的单一语法 (Windows, macOS, Linux) 我建议安装和使用 yarpm。在这种情况下,将 all 脚本中 $npm_execpath
的 all 实例替换为 yarpm
.
例如,您当前名为 typecheck:watch
的脚本将被重新定义为:
"scripts": {
"typecheck:watch": "yarpm run typecheck -- --watch",
...
}
标题是发生的错误。我在 package.json 中创建了脚本,但我想动态地使用 npm
或 yarn
。我读过可以为此使用名为“$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
但是在每一个都显示错误:
"$npm_execpath" isn't recognized as an internal or external command, program, or executable batch file
希望你能帮助我。提前致谢。
引用环境变量:
每个操作系统使用不同的语法引用环境变量:
在 *nix 操作系统上,例如 macOS 和 Linux,它们是使用美元符号前缀引用的。例如:
$npm_execpath ^
在 Windows 上,它们在两边都使用百分号引用。例如:
%npm_execpath% ^ ^
检查环境变量是否存在
首先,通过在 package.json 的 scripts
部分临时添加一个新脚本来检查 npm_execpath
变量是否存在。让我们将脚本命名为 test-var
并根据您 OS 运行:
对于Windows (cmd)
如果你是运行 Windows定义脚本如下:
"scripts": { "test-var": "echo %npm_execpath%", ... }
对于macOS/Linux (bash)
如果你是运行macOS/Linux(即bash)那么定义脚本如下:
"scripts": { "test-var": "echo $npm_execpath", ... }
然后通过 运行 以下命令调用脚本:npm run test-var
和 yarn 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 and/or 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 转义双引号中(即\"...\"
)。跨平台
必须根据 OS 使用不同的语法来引用变量并不理想,特别是如果您想要同时支持 Windows 和 *nix 操作系统。
适用于跨平台的单一语法 (Windows, macOS, Linux) 我建议安装和使用 yarpm。在这种情况下,将 all 脚本中
$npm_execpath
的 all 实例替换为yarpm
.例如,您当前名为
typecheck:watch
的脚本将被重新定义为:"scripts": { "typecheck:watch": "yarpm run typecheck -- --watch", ... }