这里的文件的作用是负责设置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. C# 自动Ping 测试服务器运行状况

    通过小程序自动Ping配置文件中的IP地址,间隔时间.IP地址.手机号码通过配置文件获得. 废话不多说,上代码. using Newtonsoft.Json; using Newtonsoft.Jso ...

  2. 如何写一个HttpClient[1]——URI的处理

    如何写一个HttpClient[1]--URI的处理 在翻阅apache的http client的代码的时候,看到org.apache.http.client.utils.URIBuilder.jav ...

  3. 2015/10 中外合璧再现辉煌—CCFC2015技术峰会

    笔者有幸参加了CCFC技术峰会,现在发布照片几张.大家看一下. 2015年10月14日,CCFC 2015电子数据取证技术峰会于四川成都举办,有200余名一线取证技术人员及国内外各行业专家参会.此次峰 ...

  4. linux 使用 rz 和 sz 命令

    linux系统 root权限 lrzsz安装包 ①. 安装 编译安装 root 账号登陆后,依次执行以下命令: tar zxvf lrzsz-.tar.gz cd lrzsz- ./configure ...

  5. Windows下部署Appium教程(Android App自动化测试框架搭建)

    摘要: 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios.android.firefox os: 4,a ...

  6. Sublime3 快捷键

    Sublime3 快捷键 blog 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子: ...

  7. filter(滤镜) 属性 内部资料 请勿转载 谢谢合作

    Filter 描述 none 默认值,没有效果. blur(px) 给图像设置高斯模糊."radius"一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起, 所以值越大越模糊 ...

  8. HTML5:web socket 和 web worker

    a:hover { cursor: pointer } 做练习遇到了一个选择题,是关于web worker的,问web worker会不会影响页面性能?补习功课之后,答案是不会影响. 查阅了相关资料学 ...

  9. jira 6.3.6安装-汉化-破解

    jira是是一个国外的项目管理软件,收费的,至于功能什么的这里就不具体说了,大家可以网上查看有很多描述的 首先你要在JIRA官网注册一个账户,可以有30天的试用期,网上很多教程是让你去网上搜一个密钥, ...

  10. Service服务

    Android多线程: 定义线程的2种方式: 1.继承Thread类,重写run()方法,new一个实例,用start()方法启动:new MyThread().start(); 2.实现Runnab ...