如何动态构建zx命令的参数?
解决zx脚本中动态构建eas build命令参数的问题
问题原因分析
- 第一种写法错误:把拼接后的整串参数作为单个变量传入时,zx会自动给这个变量加引号,导致bash把
eas build --platform ...整个当成一个命令去查找,自然找不到对应命令。 - 第二种写法错误:将
--platform ios这类带空格的参数组合成数组的单个元素,zx会把它作为一个完整参数传递给eas,但eas需要的是--platform和ios两个独立参数,因此识别失败。
正确写法
要把每个参数(包括选项和对应的值)拆分成数组的独立元素,让zx能正确解析每个参数:
const args = []; if (local) { args.push('--local'); // 无值的选项单独作为数组元素 } if (platform) { args.push('--platform', platform); // 选项和对应的值分成两个独立元素 } if (profile) { args.push('--profile', profile); // 同理拆分选项与值 } // 执行命令 await $`eas build ${args}`;
原理说明
zx的数组参数特性要求每个命令参数(选项、值)都作为数组的独立项,这样zx会自动为每个参数正确添加引号并传递给bash,彻底避免参数解析错误。
内容的提问来源于stack exchange,提问作者Jonas Sourlier
相关产品推荐
相关产品推荐

