我正在尝试构建一个package.json,这样当在Heroku上运行NodeJS应用程序时,它将使用环境变量运行scripts.postinstall步骤。例如:
...
"scripts": {
"postinstall": "command $ENV_VAR"}
},
...
我看过docs并且找不到我能说的话。
这甚至可能吗?这甚至是可取的吗?“我做错了”?
答案 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,它是完全跨平台的,使开发人员的生活更加轻松。