Skip to content

Instantly share code, notes, and snippets.

@orzFly
Last active August 29, 2015 14:23
Show Gist options
  • Save orzFly/e1730312f5656b43873c to your computer and use it in GitHub Desktop.
Save orzFly/e1730312f5656b43873c to your computer and use it in GitHub Desktop.
node-config-loader
_ = require 'lodash'
Q = require 'bluebird-q'
fs = require 'fs'
winston = require 'winston'
class Config # Singleton
init: (env) ->
return @current if @env
env || = process.env.UJS_ELECTRIC_PROXY_ENV
env || = 'development'
@current = @load(env)
@env = env
if @current.longStackSupport
Q.longStackSupport = true
process.env.BLUEBIRD_DEBUG = 1
winston.level = @current.debugLevel
winston.info "配置加载完成"
for i in @current._mergedParts
winston.info "配置文件包含 #{i}"
@current
load: (env = @env) ->
config = {}
mergedParts = []
mergePart = (name, part) ->
return unless part
config = _.merge config, part
mergedParts.push name
mergePart "config.default.base", @default.base
mergePart "config.default.override.#{env}", @default.override?[env]
mergePart "config.local.base", @local?.base
mergePart "config.local.override.#{env}", @local?.override?[env]
config.env = env
config._mergedParts = mergedParts
config
default: require './config.default.coffee'
local: require './config.local.coffee' if fs.existsSync('./config.local.coffee')
module.exports = instance = new Config()
instance.init()
module.exports =
base: # 不要用 env 这个 key,因为他会被覆盖为当前配置的名字。
debugLevel: 'debug'
longStackSupport: true
override:
production:
debugLevel: 'info'
longStackSupport: false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment