From 73fc0541ed6007079585ebe5048329b5dedda14b Mon Sep 17 00:00:00 2001 From: Luk Lu Date: Mon, 13 Jun 2022 07:56:41 +0800 Subject: [PATCH] =?UTF-8?q?merge=5Fenvar=20=E6=94=AF=E6=8C=81=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E4=BD=9C=E4=B8=BAenvarFiles=EF=BC=8C?= =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E6=96=87=E4=BB=B6=E5=AF=BC=E5=85=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- envar.js | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) 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 },