diff --git a/envar.js b/envar.js index 9dc6609..9bd5ea4 100644 --- a/envar.js +++ b/envar.js @@ -4,10 +4,13 @@ const commander = require('commander') const deepmerge = require('deepmerge') module.exports = { - /** 合并 envar config files 和 command line parameters 中的环境变量。 - * @param envarFiles: 存放 环境变量 的 文件列表。应当 按顺序导入,后面文件里的变量 覆盖前面的。 + /** 合并 envar files 和 commander parameters 中的环境变量。 + * @param envarFiles: + * - 字符串: 导入文件,内容应当是字符串数组,或者对象。 + * - 字符串数组: 按顺序导入导入每个文件,后面文件里的变量覆盖前面的。 + * - 对象: 直接添加到 global.envar 上。 */ - merge_envar ({ rawEnvar = {}, envarFiles = ['./envar-base-basic.js', './envar-base-custom.js', './envar-base-secret.js'], hasCommander = true } = {}) { + merge_envar ({ rawEnvar = {}, envarFiles = ['./envar-base-basic.js', './envar-base-custom.js', './envar-base-secret.js'] } = {}) { if (!global.envar) { global.envar = rawEnvar // 不知为何,必须定义成全局变量,才能保证多次require只执行一次。 @@ -19,16 +22,31 @@ module.exports = { console.info(`<<<<<<<< Configuring [${global.envar.prodev}] Environment <<<<<<<<`) console.info('- Loading Configuration Files (读取配置文件)') - for (let configFile of envarFiles) { - if (fs.existsSync(path.resolve(configFile))) { - global.envar = deepmerge(global.envar, require(path.resolve(configFile))) - console.info(` - ${configFile} is loaded.`) + if (typeof envarFiles === 'string') { + // 例如当输入参数为 envarFiles = 'envar-base.js' + if (fs.existsSync(path.resolve(envarFiles))) { + envarFiles = require(path.resolve(envarFiles)) } else { - console.warn(` - ${configFile} is missing.`) + console.error(` - ${envarFiles} Not Found!`) + envarFiles = undefined } } + if (Array.isArray(envarFiles)) { + for (let configFile of envarFiles) { + if (fs.existsSync(path.resolve(configFile))) { + global.envar = deepmerge(global.envar, require(path.resolve(configFile))) + console.info(` - ${configFile} is loaded.`) + } else { + console.warn(` - ${configFile} is missing.`) + } + } + } else if (typeof envarFiles === 'object') { + global.envar = deepmerge(global.envar, envarFiles) + } else { + console.warn(` - unrecognized envarFiles!`) + } - if (hasCommander) { + if (Array.isArray(global.envar.Commander_Option_List)) { console.info('- Loading Command Line Parameters (载入命令行参数)') commander.version(global.envar.Base_Version || '0.0.1', '-v, --version') // 默认是 -V。如果要 -v,就要加 '-v --version' for (let [key, param, desc] of global.envar.Commander_Option_List || []) { @@ -45,9 +63,10 @@ module.exports = { } } } + + console.log(`>>>>>>>> Configured [${global.envar.prodev}] Variables >>>>>>>>`) } - console.log(`>>>>>>>> Configured [${global.envar.prodev}] Variables >>>>>>>>`) return global.envar },