是否可以在npm / package.json中使用环境变量?

时间:2015-10-06 21:27:31

标签: node.js heroku npm package.json

我正在尝试构建一个package.json,这样当在Heroku上运行NodeJS应用程序时,它将使用环境变量运行scripts.postinstall步骤。例如:

...
"scripts": {
  "postinstall": "command $ENV_VAR"}
},
...

我看过docs并且找不到我能说的话。

这甚至可能吗?这甚至是可取的吗?“我做错了”?

2 个答案:

答案 0 :(得分:8)

忽略那些不说话的人。您可以使用cross-var

以跨平台方式执行此操作
"scripts": {
    "postinstall": "cross-var command $ENV_VAR"
}

答案 1 :(得分:7)

回答最后一个问题,因为它们是最重要的问题:是,不,绝对,因为你刚刚破坏了跨平台的兼容性。无法保证您的环境语法适用于所有操作系统上的所有shell,因此请勿执行此操作。

我们已经为我们提供了有保证的跨平台技术:Node。因此,创建一个名为bootstrap.js的文件,然后将npm run node bootstrap作为postinstall脚本。由于bootstrap.js中的代码将像任何其他节点脚本一样运行,因此它将以完全跨平台兼容的方式访问process.env,并且每个人都会很高兴。

使用常见工具的许多许多事物具有节点等价物,因此您可以npm在本地而不是全局安装它们,然后在npm脚本中调用它们。例如,mkdir -p不是跨平台的,但是安装mkdirp模块,然后像"ensuredirs": "mkdirp dist/assets"这样的npm脚本在以{{运行时运行时正常工作 1}}

为了方便起见,最常见的unix实用程序有自己的运行程序包shx,它是完全跨平台的,使开发人员的生活更加轻松。

相关问题