【问题标题】:Is it possible to consume environment variables inside of npm / package.json?是否可以在 npm / package.json 中使用环境变量?
【发布时间】:2016-01-03 23:11:39
【问题描述】:
我正在尝试构建一个 package.json,以便在 Heroku 上运行 NodeJS 应用程序时,它将使用环境变量运行 scripts.postinstall 步骤。例如:
...
"scripts": {
"postinstall": "command $ENV_VAR"}
},
...
我查看了docs 并没有找到可以说明的内容。
这甚至可能吗?这甚至是可取的和“我做错了”™?
【问题讨论】:
标签:
node.js
heroku
npm
package.json
【解决方案1】:
忽略反对者。您可以使用cross-var 以跨平台方式执行此操作:
"scripts": {
"postinstall": "cross-var command $ENV_VAR"
}
【解决方案2】:
由于编写了新软件包而更新了答案
您可以使用cross-var 包以干净的方式执行此操作:
...
"scripts": {
...
"postinstall": "cross-var command $ENV_VAR",
...
},
"dependencies": {
...
"cross-var": "^1.1.0",
...
}
...
原答案
回答最后一个问题,因为它们是最重要的一个:是的,不是的,绝对是,因为您刚刚破坏了跨平台兼容性。不能保证您的环境语法适用于所有操作系统上的所有 shell,所以不要这样做。
我们已经有保证的跨平台技术可供我们使用:Node.因此,创建一个名为 bootstrap.js 的文件,然后让 npm 运行 node bootstrap 作为您的安装后脚本。由于bootstrap.js 中的代码将像任何其他节点脚本一样运行,它可以以完全跨平台兼容的方式访问process.env,每个人都会很高兴。
而且许多、许多、许多 使用通用工具的东西都有节点等价物,因此您可以npm 在本地而不是全局安装它们,然后在 npm 脚本中调用它们。例如mkdir -p 不是跨平台的,但安装mkdirp 模块是,然后像"ensuredirs": "mkdirp dist/assets" 这样的npm 脚本在以npm run ensuredirs 运行时工作正常任何地方
为了方便起见,最常见的 unix 实用程序都有自己的运行程序包,shx,它是完全跨平台的,使开发人员的生活更加轻松,“如果你正在编写代码”相当于 @ 987654323@.