merge_envar 支持字符串作为envarFiles,作为文件导入。
This commit is contained in:
		
							parent
							
								
									64acff7b81
								
							
						
					
					
						commit
						73fc0541ed
					
				
							
								
								
									
										39
									
								
								envar.js
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								envar.js
									
									
									
									
									
								
							@ -4,10 +4,13 @@ const commander = require('commander')
 | 
				
			|||||||
const deepmerge = require('deepmerge')
 | 
					const deepmerge = require('deepmerge')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
  /** 合并 envar config files 和 command line parameters 中的环境变量。
 | 
					  /** 合并 envar files 和 commander parameters 中的环境变量。
 | 
				
			||||||
   * @param envarFiles: 存放 环境变量 的 文件列表。应当 按顺序导入,后面文件里的变量 覆盖前面的。
 | 
					   * @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) {
 | 
					    if (!global.envar) {
 | 
				
			||||||
      global.envar = rawEnvar // 不知为何,必须定义成全局变量,才能保证多次require只执行一次。
 | 
					      global.envar = rawEnvar // 不知为何,必须定义成全局变量,才能保证多次require只执行一次。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -19,16 +22,31 @@ module.exports = {
 | 
				
			|||||||
      console.info(`<<<<<<<< Configuring [${global.envar.prodev}] Environment <<<<<<<<`)
 | 
					      console.info(`<<<<<<<< Configuring [${global.envar.prodev}] Environment <<<<<<<<`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      console.info('- Loading Configuration Files (读取配置文件)')
 | 
					      console.info('- Loading Configuration Files (读取配置文件)')
 | 
				
			||||||
      for (let configFile of envarFiles) {
 | 
					      if (typeof envarFiles === 'string') {
 | 
				
			||||||
        if (fs.existsSync(path.resolve(configFile))) {
 | 
					        // 例如当输入参数为 envarFiles = 'envar-base.js'
 | 
				
			||||||
          global.envar = deepmerge(global.envar, require(path.resolve(configFile)))
 | 
					        if (fs.existsSync(path.resolve(envarFiles))) {
 | 
				
			||||||
          console.info(`  - ${configFile} is loaded.`)
 | 
					          envarFiles = require(path.resolve(envarFiles))
 | 
				
			||||||
        } else {
 | 
					        } 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 (载入命令行参数)')
 | 
					        console.info('- Loading Command Line Parameters (载入命令行参数)')
 | 
				
			||||||
        commander.version(global.envar.Base_Version || '0.0.1', '-v, --version') // 默认是 -V。如果要 -v,就要加 '-v --version'
 | 
					        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 || []) {
 | 
					        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
 | 
					    return global.envar
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user