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('請先設置當前項目的運行環境 ' +
        '\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
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM