【问题标题】: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@.

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 2018-12-03
      • 2019-05-27
      • 2018-03-18
      • 2022-01-15
      • 1970-01-01
      • 2016-04-11
      • 2016-12-22
      • 2022-01-06
      相关资源
      最近更新 更多