使用pnpm向npm脚本传递参数时占位符失效问题求助
问题:pnpm脚本无法识别参数占位符{1}
原正常配置(npm+webpack)
之前在npm+webpack环境下,package.json中的脚本配置如下:
"start:env": "npm-run-all copy lint \"webpack:dev -- --config webpack/{1}.config.js\" --",
执行命令 npm run start:env uat-local 可正常运行,{1} 会被自动替换为传入的参数 uat-local。
切换到vite+pnpm后的异常情况
切换到vite+pnpm环境后,脚本配置改为:
"start:env": "vite dev --config build-config/{1}.config.js",
执行命令 pnpm run start:env uat-local 时,参数无法被正确替换,报错信息如下:
vite --config build-config/${1}.config.js "uat-local"
✘ [ERROR] Could not resolve "/home/alex/work/.../build-config/.config.js"
可见{1}未被替换为uat-local,导致程序尝试读取不存在的空命名配置文件。
解决方案
{1} 是 npm-run-all 提供的参数占位符特性,pnpm本身并不支持该语法,需改用Shell的位置参数语法 $1:
方案1:直接使用Shell位置参数
修改package.json中的脚本配置:
"start:env": "vite dev --config build-config/$1.config.js",
执行命令时,pnpm会将传入的第一个参数传递给$1,实现正确替换。
方案2:显式指定Shell执行(兼容多环境)
若需避免不同系统的Shell兼容问题,可显式通过bash执行:
"start:env": "bash -c 'vite dev --config build-config/$1.config.js' --",
这里的--用于分隔bash自身参数与要传递的脚本参数,确保uat-local能正确映射到$1。
验证
修改配置后执行 pnpm run start:env uat-local,脚本会被解析为 vite dev --config build-config/uat-local.config.js,即可正常运行。
内容的提问来源于stack exchange,提问作者Alex Ironside
相关产品推荐
相关产品推荐

