【问题标题】:Why do my environment variables get reset after setting them with gulp?为什么我的环境变量在使用 gulp 设置后会被重置?
【发布时间】:2016-08-12 02:20:18
【问题描述】:

我在使用 Gulp 的构建过程中设置环境变量,但是一旦我的应用启动,这些环境变量就是空白的。

gulpfile.js

gulp.task('build', function() {
  if (fileExists('.env.json')) {
    console.log('Setting environment variables');
    env({
      file: '.env.json',
      vars: {"DB_NAME": "nbadbtest"}
    });
    console.log("DB_NAME=%s", process.env.DB_NAME); // DB_NAME=TestDB
  } else {
    console.log('.env.json file not found. Not setting environment variables.')
  }
  var tsProject = ts.createProject(path.resolve('./tsconfig.json'));
  var tsResult = tsProject.src().pipe(ts(tsProject));
  return tsResult.js.pipe(gulp.dest('dist'));
})

在我的 gulp 任务中运行 env() 后,我可以看到 process.env.DB_NAME 设置为“TestDB”。

server.ts

console.log("DB_NAME=%s", process.env.DB_NAME); // DB_NAME=undefined

在 server.ts 中导入后,我立即再次记录 env var,但这次它是未定义的。

这是终端中的输出:

[22:06:28] 开始“构建”...
设置环境变量
DB_NAME=nbadbtest
[22:06:32] 3.26 秒后完成“构建”
> 节点 dist/server.js

DB_NAME=未定义

【问题讨论】:

  • 仅供参考,我正在使用 Mac OS X El Capitan v10.11.6 中的 Visual Studio Code

标签: node.js gulp environment-variables


【解决方案1】:

原来这是由于启动节点应用程序的终端窗口在设置环境变量之前已经打开。当我运行npm start 时,我有一个“预启动”npm 脚本,它会在 gulp 中启动我的构建任务,它会设置这些环境变量。所以gulp buildnode dist/server.js 在同一个终端窗口中运行。

运行gulp build,然后打开一个新的终端窗口来运行node dist/server.js 可以解决此问题,因为新的终端窗口可以访问已设置的环境变量。

我现在使用的是 dotenv,而不是通过 gulp 设置我的环境变量。我只是用我的所有环境变量创建一个 .env 文件,并在我的 server.js 文件中配置 dotenv,如下所示:

require('dotenv').config();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多