如何在node.js中设置环境变量?

130
如何在node.js中设置环境变量?
我希望不依赖于任何特定平台的方法,比如运行export或cmd.exe的set命令。

1
您可以阅读此答案 https://dev59.com/KWEh5IYBdhLWcg3whT3S#57509175 - Daniel Danielecki
4个回答

196
你可以在process.env中设置你的环境变量:
process.env['VARIABLE'] = 'value';

-OR-

process.env.VARIABLE = 'value';

节点应该处理平台特定的事情。

4
我认为你不需要执行var process = require('process'),因为process是一个全局变量。 - alessioalex
114
请注意,这将仅在您的Node进程以及它调用的任何子进程中设置该变量;举个例子,当Node进程退出时,它不会在shell中保留该变量的设置(改变父进程的环境非常依赖于系统,甚至有时根本不可能)。 - ebohlman
2
有人对process.env.variable和global.variable这两者有什么看法吗? - Scott Silvi
6
如果变量名是已知的常量,那么process.env.VARIABLE是可以的,而process.env['VARIABLE']在任何情况下都可以使用;由于原始问题没有提供足够的细节,因此更通用的示例似乎更合适。 - lanzz
3
不可能有任何进程修改其父进程的环境变量。 - lanzz
显示剩余14条评论

3

首先,您应该安装此软件包:- https://github.com/motdotla/dotenv [npm install dotenv]

然后,在您的项目根目录中创建一个 .env 文件,在其中添加以下变量:

NODE_ENV=PRODUCTION
DATABASE_HOST=localhost

现在,您可以通过以下方式轻松地在代码中访问这些变量:-
require('dotenv').config()
console.log(process.env.NODE_ENV);

这对我有效,希望能帮到你。


2
dotenv使用的.env文件有多安全?如果密钥是明文存储在.env文件中的环境变量字符串中,那么这是否比将它们作为明文存储在您的节点代码中更安全?显然这是不可取的。 - Ric
OP正在询问如何在nodejs进程/脚本中设置环境变量,而不是从.env文件中读取并在运行时使用它。 - cezarlamann

1

Node v14.2.0 要设置环境变量,首先在项目主目录中创建名为config.env的文件,然后写入所需的所有变量,例如:

config.env

NODE_ENV=development
PORT=3000
DATABASE=mongodb+srv://lord:<PASSWORD>@cluster0-eeev8.mongodb.net/tour-guide?retryWrites=true&w=majority
DATABASE_LOCAL=mongodb://localhost:27017/tours-test
DATABASE_PASSWORD=UDJUKXJSSJPWMxw

现在从npm安装dotenv,dotenv将卸载您的工作。
npm i dotenv

现在在您的服务器启动脚本中,对于我的情况是server.js,请使用dotenv加载环境变量。
const dotenv = require('dotenv');
dotenv.config({ path: './config.env' });
const app = require('./app'); // must be after loading env vars using dotenv

//starting server
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`app running on port ${port}...`);
});

我正在使用Express,所有的Express代码都在app.js中,这里写出供您参考。

const express = require('express');
const tourRouter = require('./route/tourRouter');
const userRouter = require('./route/userRouter');

if (process.env.NODE_ENV === 'development') {
  console.log('mode development');
}
app.use(express.json());

app.use('/api/v1/tours', tourRouter);
app.use('/api/v1/users', userRouter);

module.exports = app;

现在通过控制台启动您的服务器,我正在使用nodemon,您可以从npm安装它;

nodemon server.js

OP正在询问如何在nodejs进程/脚本中设置环境变量,而不是从.env文件中读取并在运行时使用它。 - cezarlamann

0

我通常的做法是首先从npm安装dotenv包

npm install dotenv

然后在我的文件中导入它。

require('dotenv').config();

那么你就准备好了。:)

你可以使用以下方法读取变量:

console.log(process.env.MY_VARIABLE);

虽然您可以使用以下方式设置变量:

process.env.MY_OTHER_VARIABLE = 'helloworld;

其中SET是指设置变量的意思。


请勿在回复中使用标题。 - Marcello Romani
OP正在询问如何在nodejs进程/脚本中设置环境变量,而不是从.env文件中读取并在运行时使用它。 - cezarlamann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接