dotenv
2023年12月24日
一、认识
**dotenv
**是一个可以使得Node.js
从文件中加载环境变量的库,使用dotenv
,我们只需要将程序的环境变量配置写在.env
文件中。如果浏览器也需要使用这些环境变量,可以通过webpack.DefinePlugin
传递。
二、安装
安装dotenv
、cross-env
依赖
yarn add dotenv cross-env -S
三、配置
3.1 package.json
package.json
配置 cross-env
环境变量
{
"scripts": {
"dev": "cross-env mode=dev webpack server --config ./webpack.config.js",
"build": "cross-env mode=prod webpack build --config ./webpack.config.js"
},
}
3.2 webpack.config.js dotenv
webpack.config.js
配置 dotenv
-
通过
dotenv
依赖读取项目的.env
文件,dotenv
会自动将.env
文件中的环境变量添加到process.env
中去。const envMode = process.env.mode;
require("dotenv").config({
path: Path.resolve(process.cwd(), `./.${envMode}.env`),
}); -
将
Node
中的env
环境变量传递到浏览器- 定义
env
变量,将Node
中的process.env
存储起来,这时候可以加一些限定条件,不一定都要存入。比如说必须是VUE_APP
开头的等(这里我直接到存入了)。
const env = {};
for (const key in process.env) {
env[key] = JSON.stringify(process.env[key]);
}- 通过
webpack.DefinePlugin
将env
变量传递到浏览器
new webpack.DefinePlugin({
"process.env": {
...env,
}
}), - 定义
3.3 webpack.config.js optimization
webpack.config.js
配置 optimization
: webpack
会自动读取 webpack.config.js
配置文件中的 mode
给 process.env.NODE_ENV
赋值,如果我们这时候通过 webpack.DefinePlugin
再为 process.env.NODE_ENV
设置值,两者设置的值不一致会导致冲突报错。所以我们需要配置 optimization
,让 webpack
不会自动读取 webpack.config.js
中的 mode
给 process.env.NODE_ENV
赋值
optimization: {
nodeEnv: false,
},