这里的文件的作用是负责设置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. hdu2068RPG的错排

    Problem Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R ...

  2. Android Fragment替换View

    在BaseActivity 中添加替换方法 public void replace(int id, Fragment fragment) { getSupportFragmentManager() . ...

  3. 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...

  4. 【转】struts1.2的action参数配置

    转载地址:http://chenfeng0104.iteye.com/blog/796870 <struts-config>     <form-beans>         ...

  5. java中post时中文乱码

    http://blog.chinaunix.net/uid-12348673-id-3335300.html 设置流的编码,就避免了乱码 public static String post(Strin ...

  6. 20160626001 O2O Website

    1. http://sidapai.baijia.baidu.com/   百度百家 2. http://www.huxiu.com/    虎嗅网 3. http://i.wshang.com   ...

  7. 关于AngularJs,数据绑定与自定义验证

    最近开始着手学起了Angular,抱着好奇的心情开始研究了起来.忽然发现angular可以巧妙而方便的进行数据的绑定验证啊什么的.(当然,我只是刚开始学,所有可能有更强大的功能,只是我还没有看到) 那 ...

  8. libevent源码分析:http-server例子

    http-server例子是libevent提供的一个简单web服务器,实现了对静态网页的处理功能. /* * gcc -g -o http-server http-server.c -levent ...

  9. IE8兼容性经验小结

    DOCTYPE 首先需要确保HTML页面开始部分要有DOCTYPE声明.DOCTYPE告诉浏览器使用什么样的HTML或XHTML规范来解析HTML文档,具体会影响: 1.对标记,attributes, ...

  10. Jboss配置之数据源密码配置密文--EncryptingDataSourcePasswords

    local-tx-datasource:最常用的数据源配置,该连接池的连接管理器是LocalTxConnectionManager,只支持本地事务,不适合做分布式事务.以mssql为例如下:如果密码按 ...