dotenv是一个Node.js的npm模块,能够帮助管理项目的配置。通过在项目中创建名为.env
的文件,可以在其中定义变量,并在Node.js中使用dotenv模块将这些变量与process.env对象合并。这样做可以避免将敏感信息硬编码到代码中,同时方便管理不同环境的配置。dotenv还支持自定义配置文件名,以及在项目中使用多个配置文件。
以下是在Nodejs项目中使用dotenv的步骤:
如何使用
- 通过npm安装dotenv模块:
npm install dotenv
- 在你的项目中创建一个名为
.env
的文件(默认必须是.env
文件名,当然也可以通过配置修改),在这个文件中定义你的变量,例如:PORT=3000 DATABASE_URL=mongodb://localhost/mydatabase
- 在nodejs使用
dotenv
模块require('dotenv').config() const port = process.env.PORT const databaseUrl = process.env.DATABASE_URL
如何修改dotenv配置文件名称
.env
文件名是默认的,如果你想使用不同的文件名来存储环境变量,可以使用dotenv
的config
函数,并传递一个path
选项,该选项可以指定文件的路径和名称,例如
const dotenv = require('dotenv');
const path = require('path');
dotenv.config({ path: path.resolve(__dirname, '.env.production') });
如何配置多个文件
可以如下:
require('dotenv').config({ path: '.env.dev' });
require('dotenv').config({ path: '.env.prod' });
另外也可以将多个配置放到一个数组里面,然后传递给config
方法
dotenv核心源码
- nodejs中
process.cwd()
可以获取当前程序执行的目录,然后在当前执行的目录下查找配置文件,所以配置文件必须放在执行命令同级别; - 使用
Object.prototype.hasOwnProperty.call(process.env, key)
判断当前环境有没有定义变量,如果没有才会把设置此key的值;
const fs = require("fs");
const path = require("path");
function config(options) {
const encoding = options.encoding || "utf8";
const silent = options.silent || false;
const pathToFile = path.resolve(process.cwd(), options.path || ".env");
let parsed;
try {
// 读取 .env 文件
const src = fs.readFileSync(pathToFile, { encoding });
parsed = parse(src);
// 将 .env 文件中的环境变量设置到 process.env 上
Object.keys(parsed).forEach((key) => {
if (!Object.prototype.hasOwnProperty.call(process.env, key)) {
process.env[key] = parsed[key];
} else if (!silent) {
console.warn(`\"${key}\" is already defined in \`process.env\` and will not be overwritten`);
}
});