在开发 Node.js 应用过程中,我们经常需要设置一些环境变量,比如数据库连接信息、端口号等等。而在生产环境下,为了保护这些敏感信息,我们通常会将它们保存在环境变量中,而不是硬编码在代码中。因此,如何在不同的环境中设置不同的环境变量就成了非常重要的问题。
这时候,我们就需要使用 PM2 来管理 Node.js 应用的环境变量。PM2 是一个流行的进程管理工具,可以用来启动、停止、重启、监控 Node.js 应用。它的特点是可以在生产环境下运行应用,并且可以配置多个不同的环境。
配置环境变量
在使用 PM2 管理 Node.js 应用之前,我们需要先了解一下 PM2 的环境变量配置。
.env 文件
我们可以在项目根目录下新建一个名为 .env
的文件,用来存放环境变量。这个文件一般不会被提交到 Git 中,以保护敏感信息。示例如下:
DB_HOST=localhost DB_PORT=3306 DB_USERNAME=root DB_PASSWORD=123456
应用代码中使用环境变量
在应用代码中,我们可以使用 process.env
对象来访问环境变量。示例如下:
const dbHost = process.env.DB_HOST; const dbPort = process.env.DB_PORT; const dbUsername = process.env.DB_USERNAME; const dbPassword = process.env.DB_PASSWORD;
使用 cross-env 设置环境变量
在本地开发环境中,我们可以使用 cross-env 库来设置环境变量。
首先,安装 cross-env:
npm i -D cross-env
然后,在 package.json 文件中,修改启动命令:
{ "scripts": { "start": "cross-env NODE_ENV=production node app.js" } }
在这个例子中,我们将 NODE_ENV 环境变量设置为 "production"。这个命令会在控制台输出 "NODE_ENV=production node app.js",然后使用 cross-env 来设置环境变量。
在 PM2 中配置环境变量
了解了环境变量的配置后,我们来看一下如何在 PM2 中配置环境变量。
设置环境变量值
在命令行中,我们可以使用 --env
参数来设置环境变量。示例如下:
pm2 start app.js --env production
这个命令会在启动应用时将 NODE_ENV 环境变量设置为 "production"。如果我们没有设置 --env
参数,那么 PM2 默认会将环境变量设置为 "development"。
在 ecosystem.config.js 文件中配置环境变量
在生产环境下,我们可能需要配置多个环境变量,这时候一个一个地在命令行中输入就不太方便了。可以使用 PM2 的配置文件来管理环境变量。配置文件是一个 JavaScript 文件,可以使用 CommonJS 或 ES6 的模块语法,通常命名为 ecosystem.config.js
。
首先,在 ecosystem.config.js
文件中定义一个 env
对象,用来存放环境变量的值:
-- -------------------- ---- ------- -------------- - - ----- -- ----- -------- ------- ----------- ---- - --------- ------------- -------- ------------ -------- ----- ------------ ------- ------------ --------- -- --- --
在这个例子中,我们将 NODE_ENV 环境变量设置为 "production",并定义了四个数据库连接相关的环境变量。
然后,在命令行中使用 pm2 start
命令启动应用时,可以将 ecosystem.config.js
文件传递给 --env
参数来应用这些环境变量的值:
pm2 start ecosystem.config.js --env production
使用 .env 文件配置环境变量
如果我们使用 .env
文件配置了环境变量,可以在 ecosystem.config.js
文件中引入 dotenv
来自动载入这些变量。示例如下:
-- -------------------- ---- ------- -------------------------- ----- ------ --- -------------- - - ----- -- ----- -------- ------- ----------- ---- - --------- ------------- -------- -------------------- -------- -------------------- ------------ ------------------------ ------------ ------------------------ -- --- --
在这个例子中,我们首先引入了 dotenv
库,并加载 .env
文件中的环境变量。然后,我们将引入的环境变量分别保存在应用的 env
对象中。
使用 PM2 的 ecosystem.config.js 中的脚本文件来定义环境变量
如果我们需要在 ecosystem.config.js
中动态生成环境变量,可以在 env
对象中使用一个脚本文件来定义这些变量。示例如下:
-- -------------------- ---- ------- -------------- - - ----- -- ----- -------- ------- ----------- ---- - --------- ------------- ------------- -- -- -------------------------------------------------------------------------------------------------------------------------------- -- --- --
在这个例子中,我们定义了一个 DATABASE_URL
环境变量,它的值由一个函数返回,这个函数会将其他环境变量拼接起来。
这个例子中的环境变量是使用 PostgreSQL 配置,它需要以下环境变量:
DB_USER=myuser DB_PASS=mypassword DB_HOST=localhost DB_PORT=5432 DB_NAME=myappdb
总结
在使用 PM2 管理 Node.js 应用时,设置环境变量是非常重要的一个工作。通过本文,我们了解到了如何在不同的环境中设置不同的环境变量,并使用 PM2 的 --env
参数或 ecosystem.config.js
文件来配置这些变量。无论是在本地开发环境中还是在生产环境下,掌握这些技能都是非常有用的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645cc1e5968c7c53b0f37419