这里的文件的作用是负责设置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环境变量的更多相关文章

  1. express+gulp构建项目(二)启动项目和主文件

    这一次整理的内容是项目主文件和如何启动项目. 启动项目 通过nodejs官网的例子https://nodejs.org/docs/latest-v4.x/doc/api/synopsis.html我们 ...

  2. express+gulp构建项目(一)项目目录结构

    express是基于nodejs平台的web框架,它可以让我们快速开发出web引用.而gulp是一种自动构建工具,非常强大,有了它,能帮我们完成很多繁琐的工作,例如,静态文件的压缩,为静态文件加上哈希 ...

  3. express+gulp构建项目(五)swig模板

    这里的文件负责配置swig模板引擎. index.js var jsonHash = require('./json_file'); var staticTag = require("./t ...

  4. express+gulp构建项目(三)gulp任务

    这次来看一看gulp是怎么工作的. tasks/paths.js paths.js文件里存放的是gulp任务中需要导入的文件的路径和导出的路径. /** * gulp.src 地址 * gulp.de ...

  5. K8s中,tomcat的一部分jvm参数,如何通过env环境变量传递?

    这两天解决的一个需求: 如果用户没有在deployment中设置env参数,则tomcat默认使用1G左右的内存: 如果用户在deployment中提供了jvm参数,则tomcat将这部分的参数,覆盖 ...

  6. Linux下发布javaWeb项目,配置环境变量,tomcat,和安装mysql数据库

    如果不懂,可以联系微博本人:QQ:3111901846 (原创) 1.配置java中jdk 注意一切操作,都是在root这个目录下进行的,不要选择其他目录,不然会出现一些小问题的 第一步: 你需要一个 ...

  7. perl 对ENV环境变量的使用

    1.hash 方式访问. %ENV  key为环境变量名,value为环境变量值 2.调用ENV模块 . use Env qw(PATH); print "path is $ENV{path ...

  8. readonly&&declare&&unset &&export&&env环境变量

    readonly命令用于定义只读shell变量和shell函数.readonly命令的选项-p可以输出显示系统中所有定义的只读变量. 选项 -f:定义只读函数: -a:定义只读数组变量: -p:显示系 ...

  9. ROS学习笔记(四)——环境变量配置

    1.查看环境变量配置情况,其实并没有什么卵用 $ export | grep ROS 或者用 $ printenv | grep ROS2.配置环境变量??$ source /opt/ros/indi ...

随机推荐

  1. Windows访问Ubuntu14.04远程桌面全攻略

    最近接到一个任务,在Ubuntu系统下开发一个串口读写程序.开发要在台式机上进行,安装UbuntuKylin 14.04,并且在串口连接了设备.个人使用的是笔记本电脑,系统是Windows8.1.自然 ...

  2. HTML5 input placeholder 颜色修改

    在开发中遇到的一个小问题,记录下来./*placehodel*/ input:-ms-input-placeholder{color:#a9a9a9;}/* Internet Explorer 10+ ...

  3. iphone 群发短信 闪退 彻底解决

    用iphone5群发短信,经常闪退,一般人多的时候,最容易出现 试了很多办法,ifile改sms.db等权限等 没有根本解决 一次操作中,发现群发时,每个号码都会显示菊花,貌似在检测什么 突然意识到, ...

  4. xib加载的两种方式

      •Xib文件的加载 Ø方法1 NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"AppView" owner:nil ...

  5. 读书笔记 --TCP :传输控制协议(二)

    TCP建立连接 请求端(客户端)发送一个SYN指明客户端打算连接的服务器端口号,以及初始序列号. 服务端发回包含服务器的初始序号的SYN报文段作为应答.同时,将确认序号设置为客户的ISN加1以对客户的 ...

  6. angularJS和jQuery的区别

    问题: 假如我熟悉利用jQuery去开发客户端应用,那么我怎么上手angularjs,能否描述下所需要的模式转变,下面这些问题能够帮助你给出一个回答: 1.在设计客户端web应用的时候有什么区别,最大 ...

  7. windows programming can't find windows.h

    在用控制台编译c++程序的时候,可能会遇到找不到windows.h的情况.这是因为我们在使用cl命令的时候,并没有配置好环境变量. 所以我们在运行cl命令之前,我们可以运行C:\Program Fil ...

  8. 一个section刷新 一个cell刷新

    一个section刷新   一个cell刷新 //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2]; [tabl ...

  9. Code4App地址

    http://www.code4app.com/ 一个 ios 很多sample的网站

  10. Hadoop深入浅出实战经典–第02讲

    本文转载:通通学--知识学习与分享平台 Hadoop的核心 HDFS: Hadoop Distributed File System 分布式文件系统 MapReduce:并行计算框架 Yarn:集群资 ...