这里的文件的做用是负责设置env环境变量和日志。node
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.jsapp
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 };