reactjs - "$npm_execpath" 未被识别为内部或外部命令、程序或可执行批处理文件
问题描述
标题是正在发生的错误。我在我的 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" 未被识别为内部或外部命令、程序或可执行批处理文件
我希望你能帮助我。提前致谢。
解决方案
引用环境变量:
每个操作系统使用不同的语法引用环境变量:
在*nix操作系统上,例如 macOS 和 Linux,它们使用美元符号前缀来引用。例如:
$npm_execpath ^
在 Windows 上,它们在两边都使用百分号来引用。例如:
%npm_execpath% ^ ^
检查环境变量是否存在
首先,npm_execpath
通过临时将新脚本添加到package.jsonscripts
的部分来检查变量是否存在。让我们命名脚本并根据您正在运行的操作系统将其定义如下: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-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 和/或 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 操作系统。
对于跨平台( Windows、macOS、Linux )工作的单一语法,我建议安装和使用yarpm。在这种情况下,将所有脚本中的所有实例替换为.
$npm_execpath
yarpm
例如,您当前命名的脚本
typecheck:watch
将被重新定义为:"scripts": { "typecheck:watch": "yarpm run typecheck -- --watch", ... }
推荐阅读
- javascript - 使用 `ng-repeat` 为元素赋予不同的颜色
- android - 无法解决:om.google.android.gms:play-services-location:15.0.1
- mysql - 带有字符串值的mysql数据透视表
- makefile - Make:访问参数标志
- excel - 如何在 Excel 中检查单元格中的字符串列表?
- python - 如何使用 Selenium 和 Python 访问 Angular 的矩选择器的值?
- docker - 从 docker 镜像创建 docker 容器时出错
- java - 从大字符串中去除非 ASCII 字符
- javascript - 在 Moment.js 中从当月的第一天开始获取日期的名称
- c# - 离线分享web api文档