Yarn 3.1.0运行含export的脚本提示command not found: export问题咨询
错误原因
Yarn 3.x 默认改用内置的极简脚本解析器执行package.json中的scripts命令,不会默认调用系统shell。export是shell内置命令,不是独立存在的可执行文件,内置解析器无法识别该命令,所以会抛出command not found: export错误。而Yarn 1.x默认调用系统shell执行脚本,所以可以正常识别export等shell内置特性。
解决方案
方案1:还原Yarn 1.x的执行逻辑(无需修改原有脚本)
在项目根目录的.yarnrc.yml配置文件中添加以下配置,指定Yarn调用系统shell执行脚本:
scriptShell: bash
Windows系统可根据需求替换为scriptShell: cmd或scriptShell: powershell,配置完成后原有包含export、管道、&&连接符等shell特性的脚本不需要修改即可正常运行。
方案2:使用Yarn 3.x原生环境变量设置方式
不需要修改shell配置,可通过两种官方推荐的方式设置环境变量:
- 静态全局配置:在项目根目录新建
.env文件,直接写入需要的环境变量即可,Yarn 3.x运行脚本时会自动加载该文件内的所有变量,示例.env内容:NODE_ENV=development - 单次命令传递:执行脚本时直接在命令前加环境变量,不需要写export和连接符,示例:
yarn NODE_ENV=development someScript
方案3:跨包管理器跨平台兼容写法
如果项目需要兼容不同包管理器或者跨Windows、Mac、Linux运行,可以使用cross-env工具统一设置环境变量:
- 安装开发依赖:
yarn add -D cross-env - 修改scripts配置:
"scripts": { "someScript": "cross-env NODE_ENV=development ..." }
内容的提问来源于stack exchange,提问作者olegzhermal
相关产品推荐
相关产品推荐

