PM2 如何配置 Node.js 应用的环境变量

在开发 Node.js 应用过程中,我们经常需要设置一些环境变量,比如数据库连接信息、端口号等等。而在生产环境下,为了保护这些敏感信息,我们通常会将它们保存在环境变量中,而不是硬编码在代码中。因此,如何在不同的环境中设置不同的环境变量就成了非常重要的问题。

这时候,我们就需要使用 PM2 来管理 Node.js 应用的环境变量。PM2 是一个流行的进程管理工具,可以用来启动、停止、重启、监控 Node.js 应用。它的特点是可以在生产环境下运行应用,并且可以配置多个不同的环境。

配置环境变量

在使用 PM2 管理 Node.js 应用之前,我们需要先了解一下 PM2 的环境变量配置。

.env 文件

我们可以在项目根目录下新建一个名为 .env 的文件,用来存放环境变量。这个文件一般不会被提交到 Git 中,以保护敏感信息。示例如下:

-----------------
------------
----------------
------------------

应用代码中使用环境变量

在应用代码中,我们可以使用 process.env 对象来访问环境变量。示例如下:

----- ------ - --------------------
----- ------ - --------------------
----- ---------- - ------------------------
----- ---------- - ------------------------

使用 cross-env 设置环境变量

在本地开发环境中,我们可以使用 cross-env 库来设置环境变量。

首先,安装 cross-env:

--- - -- ---------

然后,在 package.json 文件中,修改启动命令:

-
  ---------- -
    -------- ---------- ------------------- ---- -------
  -
-

在这个例子中,我们将 NODE_ENV 环境变量设置为 "production"。这个命令会在控制台输出 "NODE_ENV=production node app.js",然后使用 cross-env 来设置环境变量。

在 PM2 中配置环境变量

了解了环境变量的配置后,我们来看一下如何在 PM2 中配置环境变量。

设置环境变量值

在命令行中,我们可以使用 --env 参数来设置环境变量。示例如下:

--- ----- ------ ----- ----------

这个命令会在启动应用时将 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 参数来应用这些环境变量的值:

--- ----- ------------------- ----- ----------

使用 .env 文件配置环境变量

如果我们使用 .env 文件配置了环境变量,可以在 ecosystem.config.js 文件中引入 dotenv 来自动载入这些变量。示例如下:

-------------------------- ----- ------ ---

-------------- - -
  ----- --
    ----- --------
    ------- -----------
    ---- -
      --------- -------------
      -------- --------------------
      -------- --------------------
      ------------ ------------------------
      ------------ ------------------------
    --
  ---
--

在这个例子中,我们首先引入了 dotenv 库,并加载 .env 文件中的环境变量。然后,我们将引入的环境变量分别保存在应用的 env 对象中。

使用 PM2 的 ecosystem.config.js 中的脚本文件来定义环境变量

如果我们需要在 ecosystem.config.js 中动态生成环境变量,可以在 env 对象中使用一个脚本文件来定义这些变量。示例如下:

-------------- - -
  ----- --
    ----- --------
    ------- -----------
    ---- -
      --------- -------------
      ------------- -- -- --------------------------------------------------------------------------------------------------------------------------------
    --
  ---
--

在这个例子中,我们定义了一个 DATABASE_URL 环境变量,它的值由一个函数返回,这个函数会将其他环境变量拼接起来。

这个例子中的环境变量是使用 PostgreSQL 配置,它需要以下环境变量:

--------------
------------------
-----------------
------------
---------------

总结

在使用 PM2 管理 Node.js 应用时,设置环境变量是非常重要的一个工作。通过本文,我们了解到了如何在不同的环境中设置不同的环境变量,并使用 PM2 的 --env 参数或 ecosystem.config.js 文件来配置这些变量。无论是在本地开发环境中还是在生产环境下,掌握这些技能都是非常有用的。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/645cc1e5968c7c53b0f37419


猜你喜欢

  • 使用 ES10 中的 Object.fromEntries 保持代码更加优雅

    在前端开发中,我们经常需要将一个对象转换成另一个对象或数组。在 ES10 中,有一个非常实用的方法 Object.fromEntries() 可以帮助我们更加优雅地执行此任务。

    1 年前
  • Cypress 测试中的安全性测试

    随着互联网技术的不断发展,安全性问题日益受到关注。对于前端开发人员,如何进行安全性测试也成为其必备技能之一。本文将介绍利用 Cypress 进行安全性测试的方法,并配合示例代码进行讲解。

    1 年前
  • babel-preset-xxx 异步加载为什么会卡?

    如果你经常使用前端框架或者写前端代码,你肯定经常使用到 babel 这个工具。babel 是一款 JavaScript 编译器,可以将 ES6/7/8 的高级语法转换成浏览器可以理解的 ES5 语法。

    1 年前
  • 50 行代码实现 GraphQL API

    GraphQL 是一个用于 API 设计的查询语言,它使得客户端可以精确地指定它需要哪些数据,从而提高了 API 的效率和可扩展性。本文将介绍如何用 50 行代码实现一个基本的 GraphQL API...

    1 年前
  • 在 Angular 中使用 HttpClient 进行 HTTP 请求

    引言 Angular 是一款非常受欢迎的前端框架,它提供了一种优秀的方式来构建现代化 Web 应用。在构建现代化 Web 应用的过程中,需要与后端进行数据交互。在 Angular 中,我们可以使用 H...

    1 年前
  • 使用 Vue 封装 Web Components 的多层嵌套

    前言 在前端开发中,我们常常会遇到需要封装一些可重复使用的组件,这些组件需要有良好的封装性、可维护性和复用性,并且能在不同的场景中快速实现动态效果。Web Components 可以帮助我们实现这个目...

    1 年前
  • RESTful API 中如何实现接口文档自动生成?

    RESTful API 是现今最流行的 API 设计风格,它的特点是简单、轻量、灵活、可扩展、易于理解和消费。而如何实现接口文档的自动生成,进而增强 API 的可读性和可维护性,是每个开发者需要面临的...

    1 年前
  • ES12中新增了Intl.DisplayNames的API

    在ES12中,新增了一个有用的API——Intl.DisplayNames,它可以帮助我们将各种名称(如语言、国家、货币)转换成用户所理解的本地化标识,使得我们可以在前端页面上更好地支持国际化。

    1 年前
  • ESLint 与 Webpack 集成及错误解决

    背景和意义 在现代前端开发中,一个稳定和高效的代码质量维护机制是必不可少的。而 ESLint 作为 JavaScript 的代码检查、风格约束和格式化工具,可以帮助开发人员提升代码的可读性、可维护性和...

    1 年前
  • Socket.io 实现持久连接的方式

    Socket.io 是一个用于实现实时的双向通信的 JavaScript 库。它能够在客户端和服务器之间建立实时、持久的连接,并且可以在任何受支持的浏览器或移动设备上工作。

    1 年前
  • CSS Reset 应如何引入样式文件?

    在编写网页时,我们常常需要使用 CSS 样式来美化页面。然而,由于浏览器对某些标签的默认样式不同,可能会导致同一份代码在不同浏览器上呈现出不一样的效果,也就出现了 CSS Reset。

    1 年前
  • Serverless 应用中的定时任务实现方案

    随着云计算技术的不断发展,Serverless 已经成为了一种趋势,越来越多的开发者开始使用 Serverless 技术来搭建自己的应用。然而,在 Serverless 应用中实现定时任务却是一件比较...

    1 年前
  • Redis 中的哈希表和有序集合的使用方法

    在 Web 开发领域中,Redis 作为一种高效的 NoSQL 数据库,广泛应用于缓存数据和共享数据等方面。其中,Redis 的 Hash 和 Sorted Set 数据结构在前端开发中使用较为频繁,...

    1 年前
  • Mongoose 中使用 Schema.Types.ObjectId 类型的方法详解

    在 Node.js 世界中,Mongoose 是一个非常流行的 MongoDB ODM 库。通过 Mongoose,我们可以方便地定义数据模型、操作数据库并生成数据验证和转换规则。

    1 年前
  • RxJS 中的 interval 操作符详解

    RxJS 是一个强大的响应式编程库,它可以帮助前端开发人员高效地处理异步数据流。其中,interval 操作符是 RxJS 最常用的操作符之一。本文将带领读者深入了解 RxJS 中的 interval...

    1 年前
  • 理解 ES6 中的类和继承

    在 ES6 中,JavaScript 引入了类和继承的概念,使得面向对象编程变得更加直观和易于理解。本文将深入讲解 ES6 中的类和继承,包括类的定义、构造函数、继承和 super 关键字等。

    1 年前
  • Sequelize ORM 指南

    什么是 Sequelize ORM Sequelize ORM 是一个 Node.js 中的 ORM(对象关系映射)库,使开发人员可以使用 JavaScript 与 PostgreSQL,MySQL,...

    1 年前
  • Chai.js 中 expect 断言的异常捕获

    异常捕获的重要性 在进行前端开发时,我们经常需要进行各种各样的测试,以确保代码的正确性和稳定性。而在测试中,我们经常使用断言来检查某些条件是否成立。当测试失败时,我们希望能够及时发现异常并定位问题,这...

    1 年前
  • ES7 之 Object.getOwnPropertyDescriptors()

    在 ES5 和 ES6 中,我们可以使用 Object.getOwnPropertyNames() 和 Object.getOwnPropertyDescriptor() 来获取对象的属性名和属性描述...

    1 年前
  • 如何在 Ionic 项目中使用 Tailwind CSS ?

    什么是 Tailwind CSS? Tailwind CSS 是一种极其实用的 CSS 框架,通过为您提供快速创建自定义样式的低级实用工具来进行工作,以便在项目中使用样式,您可以专注于代码而不是样式。

    1 年前

相关推荐

    暂无文章