express+gulp构建项目(四)env环境变量

这里的文件的作用是负责设置env环境变量和日志。
index.js
try {
    require('dotenv').load({silent: true});
    //dotenv从一个.env文件中读取环境变量到process.env中
    //process.env会返回一个所有环境变量的对象
} catch (error) {
    console.log('没有.env文件,将会从 process.env 中读取');
}
var extend = require('util')._extend;
//util._extend(target, source)此方法不稳定,请使用Object.assign()代替
//Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
var config = {};
var env = process.env.NODE_ENV;
if (!(/^(dev)|(prod)|(test)|(staging)$/).test(env)) {
    console.log('请先设置当前项目的运行环境 ' +
        '\n dev(开发) 或者 prod(生产) 或者 test(跑单元测试) 或者 staging(测试环境/仿真环境)' +
        '\n 设置方式可为设置环境变量 NODE_ENV=环境名称,或者在项目根目录下新建一个 .env 文件 在里面写上一行代码 NODE_ENV=环境名称' +
        '\n 格式(环境变量名称=值【没有引号】),比如 NODE_ENV=dev ');
    process.exit(1); //process.exit(code)尽可能快的停止node服务
}
switch (env) { //根据环境,将base基础环境变量导入相应文件中
    case 'dev':
        config = extend(require('./env/dev'), require('./env/base'));
        break;
    case 'test':
        config = extend(require('./env/test'), require('./env/base'));
        break;
    case 'prod':
        config = extend(require('./env/prod'), require('./env/base'));
        break;
    case 'staging':
        config = extend(require('./env/staging'), require('./env/base'));
        break;
}
var reWrittenEnv = function (config) { //将env对象变成字符串存入envList数组
    var envList = [];
    for (var o in config) {
        envList[envList.length] =  o + '=' + config[o] + '\n';
    }
};
if (env !== 'test') {
    reWrittenEnv(config);
}
for (var o in config) { //将env存入global和process.env中
    global[o] = config[o]; //global是node中的全局变量
    process.env[o] = config[o];
}
exports.staus = true;
log4js.js
var log4js = require('log4js'); //日志
var logParams = {
    replaceConsole: false
}; //是否取代console.log
if (global.LOG_PRINT == 1) { //appender中配置两个输出,一个输出info日志,一个输出error日志
    logParams.appenders = [
        {
            type: 'dateFile', //文件类型
            absolute: true, //文件名路径是否绝对
            filename: 'log/info.log', //文件名
            maxLogSize: 1024 * 1024, //单文件最大,若设置了模式符,则单文件最大失效
            pattern: '-yyyy-MM-dd', //模式符,日期
            alwaysIncludePattern: true, //总是添加模式符
            category: 'info' //设置一个类型,和log4js.getLogger('category')里的类型相对应
        },
        {
            type: 'dateFile',
            absolute: true,
            filename: 'log/error.log',
            maxLogSize: 1024 * 1024,
            pattern: '-yyyy-MM-dd',
            alwaysIncludePattern: true,
            category: 'error'
        }
    ];
} else {
    logParams.appenders = [
        { type: 'console' } //控制台
    ]
}
log4js.configure(logParams);
var logInfo = log4js.getLogger('info');
var logError = log4js.getLogger('error');
module.exports = {
    logInfo: logInfo,
    logError: logError
};
base.js
base.js、dev.js、prod.js、staging.js、test.js分别是不同环境下必须的环境变量,写法都一样。
var env = require('../../tool');
module.exports = {
    PORT: env.port('PORT', 3000), //端口
    NODE_ENV: env.name('NODE_ENV'), //环境
    STATIC_DIR: env.string('STATIC_DIR', 'public'), //静态文件路径
    STATIC_URL: env.staticUrl('STATIC_URL', ''),
    STATIC_FILES_OUTPUT: env.string('STATIC_FILES_OUTPUT', 'assets'), //静态文件输出地址
    SITE_TITLE: env.string('SITE_TITLE', 'crazyxia'), //网站title
};
express+gulp构建项目(四)env环境变量的更多相关文章
- express+gulp构建项目(二)启动项目和主文件
		这一次整理的内容是项目主文件和如何启动项目. 启动项目 通过nodejs官网的例子https://nodejs.org/docs/latest-v4.x/doc/api/synopsis.html我们 ... 
- express+gulp构建项目(一)项目目录结构
		express是基于nodejs平台的web框架,它可以让我们快速开发出web引用.而gulp是一种自动构建工具,非常强大,有了它,能帮我们完成很多繁琐的工作,例如,静态文件的压缩,为静态文件加上哈希 ... 
- express+gulp构建项目(五)swig模板
		这里的文件负责配置swig模板引擎. index.js var jsonHash = require('./json_file'); var staticTag = require("./t ... 
- express+gulp构建项目(三)gulp任务
		这次来看一看gulp是怎么工作的. tasks/paths.js paths.js文件里存放的是gulp任务中需要导入的文件的路径和导出的路径. /** * gulp.src 地址 * gulp.de ... 
- K8s中,tomcat的一部分jvm参数,如何通过env环境变量传递?
		这两天解决的一个需求: 如果用户没有在deployment中设置env参数,则tomcat默认使用1G左右的内存: 如果用户在deployment中提供了jvm参数,则tomcat将这部分的参数,覆盖 ... 
- Linux下发布javaWeb项目,配置环境变量,tomcat,和安装mysql数据库
		如果不懂,可以联系微博本人:QQ:3111901846 (原创) 1.配置java中jdk 注意一切操作,都是在root这个目录下进行的,不要选择其他目录,不然会出现一些小问题的 第一步: 你需要一个 ... 
- perl 对ENV环境变量的使用
		1.hash 方式访问. %ENV key为环境变量名,value为环境变量值 2.调用ENV模块 . use Env qw(PATH); print "path is $ENV{path ... 
- readonly&&declare&&unset &&export&&env环境变量
		readonly命令用于定义只读shell变量和shell函数.readonly命令的选项-p可以输出显示系统中所有定义的只读变量. 选项 -f:定义只读函数: -a:定义只读数组变量: -p:显示系 ... 
- ROS学习笔记(四)——环境变量配置
		1.查看环境变量配置情况,其实并没有什么卵用 $ export | grep ROS 或者用 $ printenv | grep ROS2.配置环境变量??$ source /opt/ros/indi ... 
随机推荐
- iOS当中一些常见的面试题
			转自各方面..... 一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.iOS9有哪些新特性? 答案: 1)改进了 Siri 基于日期.位置和相簿名称来搜索个人照片和视 ... 
- IISExpress 调试使用学习,使用附加到进程进行快速调试
			IIS8.0 Express已经推出了,大家可以通过Microsoft Web Platform Installer 进行安装.(VS2012,VS2013已经内置了,不需安装了) 1.IIS Exp ... 
- Steve Loughran:Why not raid 0,its about time and snowflakes!!!
			与RAID-0阵列的同组管理相比,Hadoop更喜欢一组单独磁盘.在Hadoop集群中,读取速度是最能体现性能的重要指标.在Steve Loughran文章中,尤其强调了这一点,他还指出,由于驱动器速 ... 
- 安装 whmcs
			1.下载下来后(自己百度网盘),用scp 上传, 在网站能访问的地方新建目录,例如 whmcs 目录,解压到内 2.网站访问 http://ip/whmcs/index.php 提示需要安装 ionc ... 
- openlayer3 获取feature
			feature是放在vector的source中,所以在获取feature前,需先vector.getSource(),再去getFeature(). 
- WAV文件头相关资料
			http://stackoverflow.com/questions/6284651/avaudiorecorder-doesnt-write-out-proper-wav-file-header h ... 
- asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码
			重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ... 
- mysql登陆问题
			1.centos6下mysql5.7的登陆问题 问题的描述:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using p ... 
- Uva 11248 网络扩容
			题目链接:https://vjudge.net/contest/144904#problem/A 题意:给定一个有向网络,每条边均有一个容量.问是否存在一个从点1到点N,流量为C的流.如果不存在,是否 ... 
- 关于工程结合git的配置
			我们通常把代码放到git sever中,(scm manager)中,上传,下载代码, 可是通常工程的代码改动会有图标提示,改动过的,或者新增的,那么需要在eclipse的工程中做一下简单配置 1,工 ... 
