标题是发生的错误。我在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.Hc2.UI.MockServer/server.js",
"build:dev": "npm run build:standalone:dev && npm run build:module:dev"
},
我正在尝试如下运行“ build”脚本:
yarn build / npm run build
但是在每个错误中都显示错误:
“ $ npm_execpath”未被识别为内部或外部命令,程序或可执行批处理文件
希望您能帮助我。预先感谢。
答案 0 :(得分:0)
每个操作系统使用不同的语法引用环境变量:
在*nix操作系统(例如macOS和Linux)上,使用美元符号前缀对其进行引用。例如:
$npm_execpath
^
在Windows上,在两侧均使用百分号对其进行引用。例如:
%npm_execpath%
^ ^
首先,通过将新脚本临时添加到 package.json 的npm_execpath
部分,检查scripts
变量是否存在。让我们将脚本命名为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
变量,则应该看到打印到控制台的路径。例如,在运行npm run test-var
的macOS上,将显示以下内容:
/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。在这种情况下,将 all 脚本中的$npm_execpath
的 all 个实例替换为yarpm
。
例如,您当前名为typecheck:watch
的脚本将重新定义为:
"scripts": {
"typecheck:watch": "yarpm run typecheck -- --watch",
...
}