From 9af9b79237cda456b5fda66bc360c80d6a442a77 Mon Sep 17 00:00:00 2001 From: "luk.lu" Date: Fri, 5 Aug 2022 17:31:33 +0800 Subject: [PATCH] u --- envar.js | 78 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/envar.js b/envar.js index 1391366..dc392dd 100644 --- a/envar.js +++ b/envar.js @@ -23,14 +23,15 @@ module.exports = { console.info('- Loading Configuration Files (读取配置文件)') if (typeof envarFiles === 'string') { - // 例如当输入参数为 envarFiles = 'envar-base.js' + // 例如当输入参数为 envarFiles = 'envar-base.js' 里面应当 module.exports 一个数组 if (fs.existsSync(path.resolve(envarFiles))) { envarFiles = require(path.resolve(envarFiles)) } else { - console.error(` - ${envarFiles} Not Found!`) + console.warn(` - ${envarFiles} is missing.`) envarFiles = undefined } } + if (Array.isArray(envarFiles)) { for (let configFile of envarFiles) { if (fs.existsSync(path.resolve(configFile))) { @@ -72,28 +73,75 @@ module.exports = { /* 读取动态配置文件中的环境变量。 */ - get_dynamic_envar ({ dynamicEnvarFile = './envar-base-dynamic.js' } = {}) { - // dynamicEnvarFile should be absolute or relative to the node process's dir. - const fullpath = path.resolve(dynamicEnvarFile) - if (fs.existsSync(fullpath)) { - delete require.cache[require.resolve(fullpath)] // delete require.cache[fullpath] 不起作用 - return require(fullpath) - } else { - return {} + get_dynamic_envar ({ dynamicEnvarFiles = './envar-base-dynamic.js' } = {}) { + // config file should be absolute or relative to the node process's dir. + + let dynamicEnvar = {} + + if (typeof dynamicEnvarFiles === 'string') { + if (fs.existsSync(path.resolve(dynamicEnvarFiles))) { + dynamicEnvarFiles = require(path.resolve(dynamicEnvarFiles)) + } else { + console.warn(` - ${dynamicEnvarFiles} is missing.`) + dynamicEnvarFiles = undefined + } } + + if (Array.isArray(dynamicEnvarFiles)) { + for (let dynamicFile of dynamicEnvarFiles) { + if (fs.existsSync(path.resolve(dynamicFile))) { + delete require.cache[require.resolve(path.resolve(dynamicFile))] // delete require.cache[fullpath] 不起作用,必须要加 require.resolve + dynamicEnvar = deepmerge(dynamicEnvar, require(path.resolve(dynamicFile))) // 在这里其实不需要 deepmerge + console.info(` - ${dynamicFile} for dynamics is parsed.`) + } else { + console.warn(` - ${dynamicFile} for dynamics is missing.`) + } + } + } else if (typeof dynamicEnvarFiles === 'object') { + dynamicEnvar = dynamicEnvarFiles + } else { + console.warn(` - unrecognized dynamicEnvarFiles!`) + } + + return dynamicEnvar }, /* 隐藏机密配置文件中的环境变量。 * 需要输出当前环境变量时,必须调用本函数,避免机密信息被输出。 */ - mask_secret_envar ({ secretEnvarFile = './envar-base-secret.js' } = {}) { + mask_secret_envar ({ secretEnvarFiles = ['./envar-base-secret.js'] } = {}) { let envar = JSON.parse(JSON.stringify(global.envar)) // 复制一份,避免污染 - if (fs.existsSync(path.resolve(secretEnvarFile))) { - const secretEnvar = require(path.resolve(secretEnvarFile)) - for (let key in secretEnvar) { - envar[key] = '****** confidential ******' + + let secretEnvar = {} + + if (typeof secretEnvarFiles === 'string') { + if (fs.existsSync(path.resolve(secretEnvarFiles))) { + secretEnvarFiles = require(path.resolve(secretEnvarFiles)) + } else { + console.warn(` - ${secretEnvarFiles} is missing.`) + secretEnvarFiles = undefined } } + + if (Array.isArray(secretEnvarFiles)) { + for (let secretFile of secretEnvarFiles) { + if (fs.existsSync(path.resolve(secretFile))) { + secretEnvar = deepmerge(secretEnvar, require(path.resolve(secretFile))) // 在这里其实不需要 deepmerge + console.info(` - ${secretFile} for secrets is parsed.`) + } else { + console.warn(` - ${secretFile} for secrets is missing.`) + } + } + } else if (typeof secretEnvarFiles === 'object') { + secretEnvar = secretEnvarFiles + } else { + console.warn(` - unrecognized secretEnvarFiles!`) + } + + for (let key in secretEnvar) { + envar[key] = '****** confidential ******' + } + return envar }, }