在开发前端应用程序时,通常需要在不同的环境中运行应用程序,而这些不同的环境可能需要不同的配置信息,例如数据库连接信息、API 地址等等。为了方便地配置这些信息,我们可以使用环境变量来存储它们。
在 Node.js 应用程序中,可以使用 process.env 对象来访问环境变量。但是,当我们使用 PM2 来部署应用程序时,需要特别注意如何配置应用程序的环境变量。
本文将介绍如何在 PM2 中配置应用程序的环境变量,并提供示例代码来演示如何使用这些环境变量。
PM2 环境变量的配置方式
在 PM2 中配置应用程序的环境变量有以下几种方式:
1. 在启动命令中设置环境变量
可以在启动命令中使用 NODE_ENV 和其他自定义的环境变量来启动应用程序。例如:
pm2 start app.js --name=myapp --env production -- --port=8080
在这个例子中,我们设置了一个名为 myapp 的应用程序,使用了 production 的环境变量,以及自定义的 --port 参数来配置应用程序的端口。
2. 使用 ecosystem 配置文件设置环境变量
可以在 PM2 的 ecosystem 配置文件中设置应用程序的环境变量。例如:
-- -------------------- ---- ------- -------------- - - ----- - - ----- -------- ------- --------- ---- - --------- ------------- ----- ------ - - - -
在这个例子中,我们设置了一个名为 myapp 的应用程序,使用了 production 的 NODE_ENV 环境变量,以及 8080 的 PORT 环境变量来配置应用程序的端口。
3. 使用默认的环境变量
PM2 会自动设置一些默认的环境变量,例如 NODE_ENV。可以在应用程序中直接使用这些环境变量。例如:
const port = process.env.PORT || 3000;
在这个例子中,我们使用了环境变量 PORT 来配置应用程序的端口。如果没有设置这个环境变量,就会使用默认的端口 3000。
示例代码
下面是一个简单的 Node.js 应用程序,它使用了上述三种方式来配置环境变量。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- ---- - ---------------- -- ----- ----- ----------- - ------------------------- ------------ ----- ---- -- - --------------- ------ -------- ---- ----------------- --- ---------------- -- -- - -------------------- --- --------- -- --------------------------- ---
可以拷贝这个代码到一个名为 app.js 的文件中,并使用以下命令来启动应用程序:
pm2 start app.js --name=myapp --env production -- --port=8080
或者,将以下内容保存到一个名为 ecosystem.config.js 的文件中,并使用以下命令来启动应用程序:
-- -------------------- ---- ------- -------------- - - ----- - - ----- -------- ------- --------- ---- - --------- ------------- ----- ------- ------------- -------------------------------------- - - - -
pm2 start ecosystem.config.js
通过以上两种方式,都可以配置环境变量并启动这个应用程序。如果一切正常,可以在浏览器中访问 http://localhost:8080,看到一个欢迎页面,同时在终端中看到类似于以下的输出:
Example app listening at http://localhost:8080
结论
在 PM2 中配置应用程序的环境变量可以通过启动命令、ecosystem 配置文件、以及默认的环境变量三种方式来实现。了解这些方式并加以使用,可以方便地配置应用程序的环境变量,并且能够提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675135b78bd460d3ad8769aa