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

如何从NPM脚本获取对象参数(NodeJS + TypeScript)

问题:NPM脚本传递对象时解析出多余逗号,无法正常使用

我想通过NPM脚本传递一个对象,示例脚本如下:

"update-user-roles": "ts-node user-roles.ts {PAID_USER: true, VIP: true}"

函数能获取到对象,但会自动添加多余逗号,导致无法正确更新用户。请问怎么原样接收这个对象?

我的代码:

async function updateUserRoles(roles: any) {
    const userID = await getAuth().then((res) => res.uid);
    updateUser({
        userID: userID,
        fields: {
            roles: {
                roles
            },
        }
    })
    console.log(`User roles successfully added: ${roles}`)
}

const rolesString = JSON.stringify(process.argv.slice(2))
updateUserRoles(JSON.parse(rolesString))

得到的日志:

User roles successfully added: {PAID_USER:,true,,VIP:,true}

解决方法

问题根源

命令行会把空格作为参数分隔符,你写的{PAID_USER: true, VIP: true}会被拆成{PAID_USER:、true,、VIP:、true}四个独立的命令行参数。你用JSON.stringify(process.argv.slice(2))把这些参数拼成数组再转字符串,解析后自然会出现多余逗号的混乱结构。

具体方案

方案1:给对象参数加引号,让命令行识别为单个字符串

修改NPM脚本,把对象用引号包裹(注意和外层JSON的引号区分,需要转义):

"update-user-roles": "ts-node user-roles.ts '{\"PAID_USER\": true, \"VIP\": true}'"

然后代码里直接取第一个参数,不用处理数组:

const rolesString = process.argv[2];
updateUserRoles(JSON.parse(rolesString));

注意:Windows系统下引号转义规则不同,可能需要改成:

"update-user-roles": "ts-node user-roles.ts \"{\\\"PAID_USER\\\": true, \\\"VIP\\\": true}\""

方案2:用环境变量传递对象

把对象放到环境变量里,避开命令行参数的解析问题:
修改NPM脚本:

"update-user-roles": "ROLES='{\"PAID_USER\": true, \"VIP\": true}' ts-node user-roles.ts"

代码里读取环境变量:

const rolesString = process.env.ROLES;
if (!rolesString) {
  throw new Error("请传入roles参数");
}
updateUserRoles(JSON.parse(rolesString));

方案3:拆分参数,代码里组装对象

如果不想处理引号转义,可以把键值对分开传递,代码里再组装成对象:
修改NPM脚本:

"update-user-roles": "ts-node user-roles.ts PAID_USER=true VIP=true"

代码里处理参数:

const roles = process.argv.slice(2).reduce((acc, item) => {
  const [key, value] = item.split('=');
  // 处理布尔值的转换
  acc[key] = value === 'true' ? true : value === 'false' ? false : value;
  return acc;
}, {} as Record<string, any>);
updateUserRoles(roles);

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:05:12