为开发和生产环境提供一些配置文件分离的示例
配置文件用于存储我们应用程序的URL、与环境相关的凭证等。为了访问配置文件,最好安装 https://www.npmjs.com/package/dotenv npm包,并将其放置在应用程序启动的根文件中。这用于检测是否传递了任何.env值。
通常,所有的配置文件都存储在.env变量中,为每个环境单独设置和处理这些变量有点棘手。
相反,我们可以根据下面的文件夹结构仅拥有一个config.json文件。
config.json:
我们可以按照以下方式使用config.json文件。
const _ = require('lodash');
const config = require('./key/config.json');
let finalConfig = {};
const environment = {
config_id: process.env.NODE_ENV || 'local',
};
const defaultConfig = config.default;
const environmentConfig = config[environment.config_id];
finalConfig = _.merge(defaultConfig, environmentConfig);
global.gConfig = finalConfig;
在上面的示例中,为了合并配置项,使用了一个名为 “dash” 的 npm 实用程序包。根据上面的示例,我们只需要在 .env 文件中设置 NODE_ENV。
config.json: 我们的 config.json 文件如下所示。
{
"local": {
"config_id": "local",
"node_port": 3000,
"database_connection_string": "mongodb://localhost:27017",
"redis_port": 6379,
"redis_connection_host": "localhost",
"JWT_PUBLIC_KEY": "./auth/key/access_key/jwt_rs256.key.pem",
"cross_service_url": "http://localhost:8001/cross_service"
},
"dev": {
"config_id": "dev",
"node_port": 3000,
"database_connection_string": "mongodb://22.34.54.21:27017",
"redis_port": 6379,
"redis_connection_host": "22.34.54.11",
"JWT_PUBLIC_KEY": "./auth/key/access_key/jwt_rs256.key.pem",
"cross_service_url": "http://1.108.151.123:8001/cross_service"
},
"prod": {
"config_id": "prod",
"node_port": 3000,
"database_connection_string": "mongodb://3.44.56.67:27017",
"redis_port": 6379,
"redis_connection_host": "13.34.36.67",
"JWT_PUBLIC_KEY": "./auth/key/access_key/jwt_rs256.key.pem",
"cross_service_url": "http://6.238.341.125:8001/cross_service"
}
}
仅通过传递NODE_ENV(例如local,dev或prod),我们就能够通过全局配置访问相应的环境变量,如下面的示例所示,用于访问redis主机,通过在.env文件中设置NODE_ENV为local
const REDIS_HOST = global.gConfig.redis_connection_host;
console.log(REDIS_HOST)
// localhost
请确保在 .gitignore 文件中放置 config 文件夹和 .env 文件,并根据环境在 .env 中指定相应的值,config.json 的值将根据 .env 中的值进行映射。