首页 > 解决方案 > 预启动脚本中的 Dotenv 环境变量

问题描述

.env | .env.development | .env.production在我的节点服务器根目录(server.js 和 prestart.js 所在的位置)上创建了 3 个文件。

我正在调用dotenv.config()文件prestart.js,它看起来像:

import dotenv from 'dotenv';
import mysql from "mysql2";

dotenv.config();

console.log(`Hey: ${process.env.REACT_APP_DOTENV_EXISTS}`); // here it works!

let dbConfig = import("./src/config/db-config.js"); // doesn't work in that file!

我的db-config.js样子:

const isDevEnv = !process.env.NODE_ENV || process.env.NODE_ENV === 'development';

let config = {};

if(isDevEnv) {
    config = {
        host: process.env.REACT_APP_DB_HOST,          // undefined!
        user: process.env.REACT_APP_DB_USERNAME,      // undefined!
        password: process.env.REACT_APP_DB_PASSWORD,  // undefined!
        db: process.env.REACT_APP_DB_DATABASE,        // undefined!
        dialect: process.env.REACT_APP_DB_CONNECTION, // undefined!
        pool: {
            max: 5,
            min: 0,
            acquire: 30000,
            idle: 10000
        }
    };
}
else{
    // TODO: amazon rds mysql config ?
}

export default config;

最后我的package.json脚本部分看起来像:

"scripts": {
    "prestart": "node prestart.js",
    "start": "node server.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

我尝试-r dotenv/config . dotenv_config_path=./.env.development在我的代码中添加开始和预启动键package.json并删除代码中 dotenv 的手动导入和初始化,但是预启动脚本甚至没有被执行。

我正在检查我的prestart.js.

更令人困惑的部分是,如果我在db-config.js文件中导入和初始化 dotenv,那么变量在任何地方都有效,包括在prestart.js文件内部(我将 db-config 导入移到顶部)和server.js文件,但如果我将它初始化prestart.js为我当前的设置,那么除了prestart.js文件本身之外,这些变量在任何地方都不起作用。

编辑:忽略.development & .production文件,因为我暂时将所有内容复制到 .env 中,这些也困扰着我,但这是另一个问题。

标签: node.jsenvironment-variablesdotenv

解决方案


推荐阅读