这里的文件的作用是负责设置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. html标签中meta属性使用介绍

    前言 meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用 ...

  2. PL/SQL Developer连接Oracle 11g在Win8 64位系统下乱码

    PL/SQL Developer在64位系统上连接Oracle,需要安装32位Oracle client客户端,使用后,发现操作数据库出现乱码的情况.经过查找资料,解决此问题,方法如下: 需要在系统的 ...

  3. iperf交叉编译:

    下载:http://sourceforge.net/projects/iperf 1. 先把iperf-2.0.4.tar.gz解压到你的目录下.2. cd iperf-2.0.43. ./confi ...

  4. JAVA异常处理机制的简单原理和应用

  5. C#中static关键字的作用

    静态分配有两种情况:1.用在类里的属性.方法前面,这样的静态属性与方法不需要创建实例就能访问,通过类名或对象名都能访问它,静态属性.方法只有"一份":即如果一个类新建有N个对象,这 ...

  6. [课程设计]Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面)

    Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...

  7. QM模块包含主数据(Master data)和功能(functions)

    QM模块包含主数据(Master data)和功能(functions)   QM主数据   QM主数据 1 Material   Master MM01/MM02/MM50待测 物料主数据 2 Sa ...

  8. 获取div或者元素相对于屏幕坐上角的绝对位置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 关于node.js杂记

    https://gitlore.com/page/gitlore-git/nodejs/index.html[node.js中文文档] //////    https://gitlore.com/in ...

  10. 安卓解析json,使用BaseAdapter添加至ListView中,中间存储用JavaBean来实现

    这是一个小练习,要求解析一个提供的json文件.并将其中的id,title值获取,以ListView形式展示出来.(开发工具是android studio) 下面开始: 首先我想到的是先把json文件 ...