【问题标题】:Convert an argument passed to an npm script to an environment variable将传递给 npm 脚本的参数转换为环境变量
【发布时间】:2020-09-09 11:28:27
【问题描述】:

这是我的package.json

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

在我的包中,包根目录下有package.jsondo_something.sh 文件,./src 中有一个test_file.spec.ts 模块。

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

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

npm run start --FOO=bar

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

所以在package.json 我会做这样的事情:

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

(我正在使用来自herenpm_config_ 方法)

然后从do_something.sh内部:

echo $FOO

test_file.spec.ts内:

console.log(process.env.FOO);

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

【问题讨论】:

    标签: node.js bash npm environment-variables npm-scripts


    【解决方案1】:

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

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

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

    【讨论】:

    • 这看起来不错,虽然它的缺点是不独立于平台。
    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多