亚大伯斯 2025-08-21 22:30 采纳率: 97.8%
浏览 0
已采纳

Node.js中如何正确设置和读取环境变量?

**问题:在Node.js中,如何正确使用`process.env`来设置和读取环境变量?有哪些常见的注意事项和实践方法?**
  • 写回答

1条回答 默认 最新

  • 舜祎魂 2025-08-21 22:30
    关注

    一、Node.js 中 `process.env` 的基本使用

    在 Node.js 中,`process.env` 是一个对象,用于访问操作系统中设置的环境变量。这些变量通常用于配置应用程序的不同行为,例如数据库连接信息、API 密钥、运行环境(开发、测试、生产)等。

    读取环境变量非常简单,例如:

    console.log(process.env.HOME); // 输出当前用户的主目录路径

    设置环境变量可以在启动 Node.js 应用时通过命令行进行:

    PORT=3000 NODE_ENV=development node app.js

    此时在 `app.js` 中可以通过如下方式读取:

    console.log(process.env.PORT); // 输出 3000
    • `process.env` 返回的值始终是字符串类型
    • 若变量未设置,访问时返回 `undefined`

    二、使用 `.env` 文件管理环境变量

    为了便于开发和管理,通常使用 `.env` 文件来存储环境变量。Node.js 社区广泛使用的库是 `dotenv`。

    安装方式:

    npm install dotenv

    在入口文件(如 `app.js` 或 `index.js`)顶部加载配置:

    require('dotenv').config();

    .env 文件示例:

    DB_HOST=localhost
    DB_USER=root
    DB_PASS=123456
    

    在代码中使用:

    console.log(process.env.DB_HOST); // 输出 localhost

    三、常见的注意事项

    虽然 `process.env` 使用简单,但仍有几个常见注意事项:

    1. 变量名称建议全大写,遵循命名规范
    2. 避免在代码中硬编码敏感信息,应使用环境变量
    3. 不同操作系统中环境变量的设置方式不同,需注意兼容性
    4. 使用 `dotenv` 时,确保 `.env` 文件被加入 `.gitignore`,防止敏感信息提交
    5. 环境变量的值始终是字符串,需要手动转换为布尔、数字等类型

    例如,将字符串转换为数字:

    const port = parseInt(process.env.PORT, 10);

    四、实践方法与最佳实践

    为了更安全、更灵活地使用环境变量,以下是一些推荐的实践方法:

    实践方法说明
    使用 `dotenv` 管理变量开发环境使用 `.env` 文件,生产环境使用系统环境变量
    区分环境配置使用 `.env.development`, `.env.production` 等文件按环境区分配置
    使用 `cross-env` 跨平台支持在 `package.json` 脚本中使用 `cross-env` 设置环境变量,避免平台差异问题
    使用 Schema 校验使用 `dotenv-safe` 或 `joi` 等库对 `.env` 文件进行校验,确保变量存在且符合预期

    例如使用 `cross-env` 的脚本:

    "scripts": {
      "start": "cross-env NODE_ENV=production node app.js"
    }

    五、环境变量在 CI/CD 中的使用

    在持续集成和持续部署(CI/CD)流程中,环境变量是配置部署环境的关键手段。

    例如在 GitHub Actions 中设置环境变量:

    jobs:
      build:
        environment:
          name: production
          url: ${{ steps.deploy.outputs.url }}
        env:
          PORT: 8080
          NODE_ENV: production

    在 CI/CD 工具中,敏感变量(如 API 密钥)应通过加密方式存储,并在运行时注入到 `process.env` 中。

    流程图示意如下:

    graph TD A[代码提交到仓库] --> B[CI/CD 流程触发] B --> C[加载环境变量] C --> D[执行构建/测试] D --> E[部署应用] E --> F[应用使用 process.env 获取配置]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 8月21日