node.js - 预启动脚本中的 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 中,这些也困扰着我,但这是另一个问题。
解决方案
推荐阅读
- java - 让 websocket 客户端订阅,前提是该通道有一个端点
- html - 如何在 html 的 iframe 中显示网站
- vb.net - 覆盖类型的 Setter/Getter
- excel - 使用 VBA 代码复制、粘贴和删除受保护的 Excel 工作表中的行/行
- php - php如何避免重复数据
- ios - 如何设置一个水平分页的 UIScrollView,上面有一个 UITextView
- mysql - 是否可以从单个查询将行插入到两个表中
- matlab - 在 Matlab 中读取 jpeg 文件失败
- java - Spring注入接口实现
- linux - 如何在linux中正确使用sed