首页 > 解决方案 > 将传递给 npm 脚本的参数转换为环境变量

问题描述

这是我的package.json

"scripts": {
  "start": "bash do_something.sh && jest",
  "...": "..."
}

在我的包中,包根目录下有package.jsonand文件,而.do_something.shtest_file.spec.ts./src

因此,npm run start从 CLI 执行首先使用 bash 运行 shell 脚本,然后当 shell 脚本完成时,它会运行 jest。到目前为止,这工作正常。

但是,在 (as ) 和测试模块 (as ) 内部有一个硬编码FOO常量do_something.shFOO="bar"例如const FOO = "bar";。不必在每次运行时更改两个文件中的常量,我希望能够在调用脚本时从 CLI 设置它,方法是:

npm run start --FOO=bar

然后,我想从 中的 npm 脚本定义中截取该 CLI 参数,并将其设置为可在shell 脚本和模块中package.json访问的环境变量。do_something.shtest_file.spec.ts

所以在package.json我会做类似的事情:

"scripts": {
  "start": "env FOO=$npm_config_FOO bash do_something.sh && jest",
  "...": "..."
}

(我正在使用这里npm_config_的方法)

然后从内部do_something.sh

echo $FOO

并且在test_file.spec.ts

console.log(process.env.FOO);

我想我已经接近让它工作了,我认为只是缺少一些步骤。

标签: node.jsbashnpmenvironment-variablesnpm-scripts

解决方案


我认为它非常接近你所拥有的

"scripts": {
   "start": "export FOO=\"$npm_config_FOO\"; bash do_something.sh && jest"
   ...
}

它将导出FOO,它将在bashjest环境中可用。


推荐阅读