You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:52:33