zoukankan      html  css  js  c++  java
  • express+gulp构建项目(四)env环境变量

    这里的文件的作用是负责设置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('请先设置当前项目的运行环境 ' +
            '
     dev(开发) 或者 prod(生产) 或者 test(跑单元测试) 或者 staging(测试环境/仿真环境)' +
            '
     设置方式可为设置环境变量 NODE_ENV=环境名称,或者在项目根目录下新建一个 .env 文件 在里面写上一行代码 NODE_ENV=环境名称' +
            '
     格式(环境变量名称=值【没有引号】),比如 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] + '
    ';
        }
    };
    
    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
    };
  • 相关阅读:
    XML节点处理
    Log4Net使用记录
    WPF选择文件夹及文件操作
    SQL 一些语句记录
    一篇MSSQL事务的测试文章
    游标示例
    WPF实现多线程加载数据
    MS SQL索引学习
    Entity Framework 利用 Database.SqlQuery<T> 执行存储过程,并返回Output参数值
    手持移动端特殊链接:打电话,发短信,发邮件
  • 原文地址:https://www.cnblogs.com/hahazexia/p/6213273.html
Copyright © 2011-2022 走看看