From 94fa5915b3faff5a11ab3591a8e708aec2c8342d Mon Sep 17 00:00:00 2001 From: Luk Date: Sun, 22 Sep 2024 15:51:25 +0800 Subject: [PATCH] ignore *nogit* and *nosf* --- .gitignore | 6 +++++- envar-tool.js | 40 +++++++++++++++++++++++++++++++++------- seafile-ignore.txt | 4 ++++ 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 36e9cc0..470c161 100644 --- a/.gitignore +++ b/.gitignore @@ -13,9 +13,13 @@ ?*.gitignore.* ?*.gitignore.*/ *.gitomit -*.gitomit/ *.gitomit.* +*.gitomit/ *.gitomit.*/ +*.nogit +*.nogit.* +*.nogit/ +*.nogit.*/ # 保留 !.gitignore !.gitignore.* diff --git a/envar-tool.js b/envar-tool.js index 33f3177..fbc483d 100644 --- a/envar-tool.js +++ b/envar-tool.js @@ -16,11 +16,16 @@ module.exports = { // .on('all', (event, onpath)) 但这时,即使server刚启动,也会调用到这里一次 console.log('envarTool.start_watching: envar file changed:', onpath) try { + // 或者调用 get_dynamic_envar。 delete require.cache[require.resolve(path.resolve(onpath))] - assign_deep(rawEnvar, require(path.resolve(onpath))) - console.log(`envarTool.start_watching: successfully reload ${onpath}`) + let newEnvar = require(path.resolve(onpath)) + if (typeof newEnvar === 'function') newEnvar = newEnvar() + // 注意,assign_deep 会用 newEnvar 里的 undefined 属性覆盖掉 rawEnvar 里的原属性!所以要注意保持一致。(这和发送到前端的不一样,发送到前端的会被 JSON.stringify 以及 express 过滤掉 undefined.) + // 目前的解决方案里,已通过 base2app 参数来确保只在发送给前端时才设置 undefined,但为防万一,在这里通过 JSON.stringify 确保删除了 undefined + assign_deep(rawEnvar, JSON.parse(JSON.stringify(newEnvar))) + console.log(`envarTool.start_watching: OK reload ${onpath}`) } catch (expt) { - console.log(`envarTool.start_watching: failed reload ${onpath}`) + console.log(`envarTool.start_watching: Fail reload ${onpath}`) } }) }, @@ -58,7 +63,12 @@ module.exports = { if (Array.isArray(envarFiles)) { for (let configFile of envarFiles) { if (fs.existsSync(path.resolve(configFile))) { - assign_deep(rawEnvar, require(path.resolve(configFile))) + const fileContent = require(path.resolve(configFile)) + if (typeof fileContent === 'object') { + assign_deep(rawEnvar, fileContent) + } else if (typeof fileContent === 'function') { + assign_deep(rawEnvar, fileContent()) + } console.info({ _at: new Date().toJSON(), _from: 'merge_envar', about: ` - ${configFile} is loaded.` }, '\n,') } else { console.warn({ _at: new Date().toJSON(), _from: 'merge_envar', about: ` - ${configFile} is missing.` }, '\n,') @@ -66,6 +76,8 @@ module.exports = { } } else if (typeof envarFiles === 'object') { assign_deep(rawEnvar, envarFiles) + } else if (typeof envarFiles === 'function') { + assign_deep(rawEnvar, envarFiles()) } else { console.warn({ _at: new Date().toJSON(), _from: 'merge_envar', about: ` - unrecognized envarFiles!` }, '\n,') } @@ -95,7 +107,7 @@ module.exports = { /* 读取动态配置文件中的环境变量。 */ - get_dynamic_envar ({ dynamicEnvarFiles = ['./envar-base-dynamic.js', './envar-base-dynamic.gitignore.js'] } = {}) { + get_dynamic_envar ({ dynamicEnvarFiles = ['./envar-base-dynamic.js', './envar-base-dynamic.gitignore.js'], base2app } = {}) { // config file should be absolute or relative to the node process's dir. let dynamicEnvar = {} @@ -114,7 +126,12 @@ module.exports = { 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 - assign_deep(dynamicEnvar, require(path.resolve(dynamicFile))) // 在这里其实不需要 assign_deep + const fileContent = require(path.resolve(dynamicFile)) + if (typeof fileContent === 'object') { + assign_deep(dynamicEnvar, fileContent) + } else if (typeof fileContent === 'function') { + assign_deep(dynamicEnvar, fileContent({ base2app })) + } console.info({ _at: new Date().toJSON(), _from: 'get_dynamic_envar', about: ` - ${dynamicFile} is parsed.` }, '\n,') } else { console.warn({ _at: new Date().toJSON(), _from: 'get_dynamic_envar', about: ` - ${dynamicFile} is missing.` }, '\n,') @@ -122,6 +139,8 @@ module.exports = { } } else if (typeof dynamicEnvarFiles === 'object') { dynamicEnvar = dynamicEnvarFiles + } else if (typeof dynamicEnvarFiles === 'function') { + dynamicEnvar = dynamicEnvarFiles() } else { console.warn({ _at: new Date().toJSON(), _from: 'get_dynamic_envar', about: ` - unrecognized dynamicEnvarFiles!` }, '\n,') } @@ -150,7 +169,12 @@ module.exports = { if (Array.isArray(secretEnvarFiles)) { for (let secretFile of secretEnvarFiles) { if (fs.existsSync(path.resolve(secretFile))) { - assign_deep(secretEnvar, require(path.resolve(secretFile))) // 在这里其实不需要 assign_deep + const fileContent = require(path.resolve(secretFile)) + if (typeof fileContent === 'object') { + assign_deep(secretEnvar, fileContent) + } else if (typeof fileContent === 'function') { + assign_deep(secretEnvar, fileContent()) + } console.info({ _at: new Date().toJSON(), _from: 'mask_secret_envar', about: ` - ${secretFile} is parsed.` }, '\n,') } else { console.warn({ _at: new Date().toJSON(), _from: 'mask_secret_envar', about: ` - ${secretFile} is missing.` }, '\n,') @@ -158,6 +182,8 @@ module.exports = { } } else if (typeof secretEnvarFiles === 'object') { secretEnvar = secretEnvarFiles + } else if (typeof secretEnvarFiles === 'function') { + dynamicEnvar = secretEnvarFiles() } else { console.warn({ _at: new Date().toJSON(), _from: 'mask_secret_envar', about: ` - unrecognized secretEnvarFiles!` }, '\n,') } diff --git a/seafile-ignore.txt b/seafile-ignore.txt index 6795407..f761786 100644 --- a/seafile-ignore.txt +++ b/seafile-ignore.txt @@ -17,6 +17,10 @@ *.sfomit.* *.sfomit/ *.sfomit.*/ +*.nosf +*.nosf.* +*.nosf/ +*.nosf.*/ .DS_Store */.DS_Store