使用NPM自定义参数触发PowerShell错误,如何解决?
解决Windows下NPM脚本环境变量设置报错的问题
这个错误很常见——你用的PROJECT=my-lib npm run publish-local是**Linux/macOS Shell(Bash/Zsh等)**专属的语法,但Windows的CMD或PowerShell不支持这种直接在命令前前置环境变量的写法,所以才会把PROJECT=my-lib当成未知命令报错。
下面给你几个不同场景的解决方案:
方案1:针对Windows CMD(命令提示符)
在CMD里,需要用set命令先设置环境变量,再通过&&连接执行NPM脚本:
set PROJECT=my-lib && npm run publish-local
方案2:针对Windows PowerShell
PowerShell的环境变量语法和CMD不同,要这样写:
$env:PROJECT="my-lib"; npm run publish-local
方案3:跨平台通用方案(推荐)
如果需要你的脚本在Windows、Linux、macOS上都能正常运行,可以用cross-env工具统一环境变量的设置方式:
- 先安装cross-env到项目开发依赖:
npm install --save-dev cross-env
- 执行脚本时,用cross-env包裹环境变量设置部分,不管什么系统都能用统一写法:
npx cross-env PROJECT=my-lib npm run publish-local
或者你也可以修改package.json里的脚本,把环境变量处理逻辑内置进去,后续执行更简洁:
"publish-local": "cross-env PROJECT=$PROJECT ng build $PROJECT && cd dist/$PROJECT && npm publish --registry=http://my.local.npm.registry"
之后直接执行:
cross-env PROJECT=my-lib npm run publish-local
这样不管在哪个操作系统的终端里执行,都不会出现语法错误了。
内容的提问来源于stack exchange,提问作者Igino Boffa
相关产品推荐
相关产品推荐

