package.json脚本传参未获process.env.option识别,加载异常库存
问题根源
你当前代码逻辑读取的是Node.js运行时的环境变量,但package.json脚本中配置的--option oos是脚本执行附带的进程命令行参数,二者不属于同一个存储体系,因此无法正确读取到传参值。
- 跟在
ts-node src/xxx.ts后面的--option oos参数,会被Node.js挂载在process.argv数组中,不会自动写入process.env对象。 - 此时代码里
process.env.option的实际值为undefined,三元判断的等式永远不成立,程序会一直走else分支加载有库存的insUpdates数据集,和执行update:oos的预期不符。
可行解决方法
方案1:调整package.json脚本配置,显式注入环境变量
不使用跟在脚本路径后的传参形式,前置给进程传入对应环境变量,原有代码的判断逻辑无需修改即可正常运行:
// package.json 脚本配置调整示例 "update:oos": "cross-env option=oos ts-node src/loaders/mock/update-variants.ts", "update:ins": "cross-env option=ins ts-node src/loaders/mock/update-variants.ts"
注:使用
cross-env依赖是为了兼容Windows、Mac、Linux不同操作系统的环境变量赋值语法,避免跨系统执行时出现识别失败的问题。
方案2:保留现有脚本配置,调整代码参数读取逻辑
如果不想改动现有package.json的传参形式,就不要从process.env读取值,直接从进程命令行参数process.argv中解析传入的option值即可,示例解析逻辑:
// 兼容 --option oos 空格分隔的传参写法 const optionIndex = process.argv.indexOf("--option") const argOption = optionIndex > -1 ? process.argv[optionIndex + 1] : "" const updates = argOption === "oos" ? oosUpdates : insUpdates
内容的提问来源于stack exchange,提问作者Aessandro
相关产品推荐
相关产品推荐

