是否可以在 npm / package.json 中使用环境变量?
Posted
技术标签:
【中文标题】是否可以在 npm / package.json 中使用环境变量?【英文标题】:Is it possible to consume environment variables inside of npm / package.json? 【发布时间】:2016-01-03 23:11:39 【问题描述】:我正在尝试构建一个 package.json,以便在 Heroku 上运行 NodeJS 应用程序时,它将使用环境变量运行 scripts.postinstall 步骤。例如:
...
"scripts":
"postinstall": "command $ENV_VAR"
,
...
我查看了docs 并没有找到可以说明的内容。
这甚至可能吗?这甚至是可取的和“我做错了”™?
【问题讨论】:
【参考方案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@.
【讨论】:
以上是关于是否可以在 npm / package.json 中使用环境变量?的主要内容,如果未能解决你的问题,请参考以下文章
将您的电子邮件地址放在npm模块的package.json中是否安全?
检查 NPM package.json 和 package-lock.json 是不是兼容
通过终端检查 npm 包是不是安装在 package.json 中
是否应该将 package-lock.json 提交到 npm 包的存储库?