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

Rob*_*gen 8 heroku node.js npm package.json

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

...
"scripts": {
  "postinstall": "command $ENV_VAR"}
},
...
Run Code Online (Sandbox Code Playgroud)

我看过文档,却找不到能说的话.

这甚至可能吗?这甚至是可取的吗?"我做错了"™?

Mar*_*oon 9

忽略那些说话的人.您可以使用cross-var以下方式以跨平台方式执行此操作:

"scripts": {
    "postinstall": "cross-var command $ENV_VAR"
}
Run Code Online (Sandbox Code Playgroud)

  • (但请注意,发布此问题时 cross-var 不存在) (2认同)

Mik*_*ans 7

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

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

还有许多,许多,许多使用通用utils的东西有节点等价,这样你就可以npm安装它们,本地而不是全局的,然后再打电话给他们在NPM脚本.比如mkdir -p是不是跨平台的,但安装的mkdirp模块,然后像一个NPM脚本"ensuredirs": "mkdirp dist/assets"优秀作品无处不在的运行npm run ensuredirs

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