在前端开发中,经常需要使用环境变量来配置应用程序。Node.js 中有许多方式来使用环境变量,但当你需要同时管理多个环境变量时,手动管理起来变得很麻烦。幸运的是,有一个 npm 包可以极大地简化环境变量的管理,它便是 envvars。
简介
envvars 是一个 Node.js 模块,用于获取和设置环境变量。它允许你在项目中使用配置文件 .env
,从而能够更好地维护应用程序的环境变量。
安装
对于大多数 Node.js 项目,你可以通过 npm 来安装 envvars:
npm install envvars
如果你是在浏览器中使用 envvars,可以直接在 HTML 文件中引入它的 UMD 版本:
<script src="https://unpkg.com/envvars@^2.0.0/dist/envvars.umd.js"></script>
使用
在开始使用 envvars 之前,你需要为你的项目创建一个 .env
文件,其中包含你需要的环境变量。这个文件应该储存在项目的根目录下。
以下是一个示例 .env
文件:
DATABASE_URL=postgres://user:password@localhost:5432/mydb API_KEY=your_key_here
一旦你添加了这个文件,你就可以在你的代码中使用 envvars 引用这些环境变量了。
在 Node.js 中,你可以使用以下方式读取环境变量:
// 引入 envvars 模块 const env = require('envvars'); // 读取环境变量 const dbUrl = env.get('DATABASE_URL'); const apiKey = env.get('API_KEY');
在浏览器中,你可以使用以下方式:
// 读取环境变量 var dbUrl = envvars.get('DATABASE_URL'); var apiKey = envvars.get('API_KEY');
如果环境变量不存在,envvars 将返回 null 值。你也可以提供一个默认值:
const dbUrl = env.get('DATABASE_URL', 'default_value');
高级用法
安全配置
为了保证敏感数据的安全,envvars 提供了一个 secure
方法,可以让你将敏感数据保存在一个安全的文件中,并且仅在需要时才将其读入内存。
在 .env
文件中包含以下内容:
DATABASE_URL="secure://.env.dbconn.test"
然后配置对应的文件路径和加密密钥:
// 引入 envvars 模块 const env = require('envvars'); // 配置数据库连接数据 env.secureFile('.env.dbconn.test', './secure/dbconn.enc', 'myencryptionkey'); // 读取环境变量 const dbUrl = env.get('DATABASE_URL');
envvars 会从 ./secure/dbconn.enc
文件中获取加密数据。如果你需要更改或添加数据,可以编辑这个文件,然后重新配置环境变量即可。
自定义配置
如果你需要在引入 .env
文件之前进行一些自定义的配置,比如设置默认值或验证变量类型,你可以使用 env.load
方法。
-- -------------------- ---- ------- -- -- ------- -- ----- --- - ------------------- -- ---------- ---------- ----- - -------- ----- ----- -------- -- -------- - ----- -------- - --- -- ------ ----- ---- - ---------------- ----- ------ - -------------------
env.load
接受一个对象作为参数,该对象的键是环境变量的名称,值为一个配置对象。配置对象可以包含两个属性:
- default:环境变量的默认值。
- type:环境变量的类型。
如果环境变量不存在,envvars 将返回默认值。如果传递的类型无效,将会抛出类型错误。
总结
使用 envvars 可以让你更方便地管理环境变量,从而在不同的环境中更加轻松地配置你的应用程序。通过这个 npm 包,你可以抽象出一些固定的环节,从而事半功倍。
配置文件 .env
提供了一些必要的、公共的配置,envvars 则可以定制化、安全化地处理环境变量。对于一个大型、分散的团队而言,正确和安全地处理环境变量相当重要。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066e26a563576b7b1ecfb4