Node.js env 环境变量多种配置方式
在大多数 Unix-like 系统(如 Linux 和 macOS)中,你可以直接在命令行中设置环境变量并运行 Node.js 应用程序,而不需要使用。这样做的好处是,你可以在代码中使用这些环境变量,而不必硬编码它们,并且可以在不同的环境(如开发、测试、生产)中轻松切换这些环境变量。这样做的好处是,你的代码可以在不同的操作系统上运行,而无需修改。注意,环境变量的名称是大小写敏感的,所以在访问环境变
目录
process.env
在 Node.js 中,你可以使用 process.env
对象来读取环境变量。这个对象包含了所有的环境变量,你可以通过变量名来访问这些变量的值。
例如,如果你有一个名为 MY_VARIABLE
的环境变量,你可以这样读取它的值:
const myVariable = process.env.MY_VARIABLE;
console.log(myVariable);
这将打印出 MY_VARIABLE
环境变量的值。
注意,环境变量的名称是大小写敏感的,所以在访问环境变量时,你需要确保变量名的大小写与环境变量的大小写完全一致。
配置方式
process.env
中的环境变量来自于操作系统的环境变量。在 Node.js 中,你可以通过 process.env
对象来访问这些环境变量。这些环境变量通常是在启动 Node.js 进程时设置的,可以通过以下方式设置:
-
在操作系统级别设置:
-
在 Unix/Linux 系统中,可以在 shell 中使用
export
命令来设置环境变量。例如:export MY_VARIABLE=value
-
在 Windows 系统中,可以通过控制面板或者命令行来设置环境变量。例如:
set MY_VARIABLE=value
-
-
在应用程序启动时设置:
-
在 Node.js 应用程序中,可以在启动时通过命令行参数或者脚本文件来设置环境变量。例如:
MY_VARIABLE=value node app.js
或者在
package.json
文件中设置:{ "scripts": { "start": "MY_VARIABLE=value node app.js" } }
-
-
在应用程序代码中设置:
-
在 Node.js 应用程序中,可以使用
process.env
对象来设置环境变量。例如:process.env.MY_VARIABLE = 'value';
-
通过以上方式设置的环境变量,都可以通过 process.env
对象来访问。例如:
console.log(process.env.MY_VARIABLE); // 输出 'value'
请注意,环境变量的名称通常是大写的,以区分于其他变量。在设置和访问环境变量时,大小写敏感。
dotenv 使用
dotenv
是一个 Node.js 库,它允许你将环境变量从一个 .env
文件加载到 process.env
中。这样做的好处是,你可以在代码中使用这些环境变量,而不必硬编码它们,并且可以在不同的环境(如开发、测试、生产)中轻松切换这些环境变量。
dotenv
库的原理如下:
-
安装:首先,你需要在你的 Node.js 项目中安装
dotenv
库。你可以使用 npm(Node Package Manager)来安装它:npm install dotenv
-
创建
.env
文件:在你的项目根目录下创建一个.env
文件,并在其中定义你的环境变量。例如:DB_HOST=localhost DB_USER=root DB_PASS=s1mpl3
-
加载
.env
文件:在你的 Node.js 应用程序中,使用require('dotenv').config()
来加载.env
文件。这通常在你的应用程序的入口文件(如app.js
或server.js
)中完成。例如:require('dotenv').config();
-
使用环境变量:现在,你可以在你的代码中使用
process.env
对象来访问这些环境变量。例如:const dbHost = process.env.DB_HOST; const dbUser = process.env.DB_USER; const dbPass = process.env.DB_PASS;
- 环境变量的优先级:
dotenv
加载的环境变量会覆盖任何已经存在于process.env
中的同名变量。这意味着,如果你的操作系统中已经设置了DB_HOST
环境变量,那么dotenv
加载的值将覆盖它。 - 忽略文件:默认情况下,
dotenv
会加载.env
文件。如果你想忽略某个.env
文件,可以创建一个.env.example
文件,并在其中列出所有的环境变量,但不提供任何值。这样,其他开发者就可以根据这个文件创建自己的.env
文件,而不会覆盖已经存在的环境变量。 -
加载特定环境的
.env
文件:dotenv
允许你根据当前的环境(如development
、test
、production
)加载不同的.env
文件。例如,你可以有.env.development
、.env.test
和.env.production
文件,然后在你的应用程序中根据需要加载相应的文件。require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` });
通过使用 dotenv
,你可以轻松地管理和使用环境变量,而不必担心它们会泄露到版本控制系统中。
cross-env
在大多数 Unix-like 系统(如 Linux 和 macOS)中,你可以直接在命令行中设置环境变量并运行 Node.js 应用程序,而不需要使用 cross-env
。例如,你可以使用以下命令:
NODE_ENV=production node app.js
这将在当前 shell 会话中设置 NODE_ENV
环境变量为 production
,然后启动 app.js
文件。
然而,如果你在 Windows 系统上运行上述命令,它可能不会按预期工作,因为 Windows 的命令行语法与 Unix-like 系统不同。在 Windows 中,你需要使用 set
命令来设置环境变量,然后启动 Node.js 应用程序:
set NODE_ENV=production
node app.js
或者,你可以使用 cross-env
库来在 Windows 上设置环境变量,因为 cross-env
是一个跨平台的工具,它会根据操作系统自动选择正确的命令。
如果你不想使用 cross-env
,并且你的应用程序只在 Unix-like 系统上运行,那么直接使用 NODE_ENV=production node app.js
命令是完全可以的。然而,如果你需要在 Windows 上运行应用程序,你应该使用 set
命令或者 cross-env
。
如果你在 Windows 上使用 cross-env
,它会自动检测你的操作系统并使用适当的命令来设置环境变量。这样做的好处是,你的代码可以在不同的操作系统上运行,而无需修改。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)