2012-10-05 2 views
2

모든 변수 설정이있는 config.js가 있습니다.환경을 기반으로하는 익스프레스/노드 앱의 config.js 변수를 오버라이드

config.global.js 파일을 만들고 config.production.js 파일 중 일부 파일을 덮어 쓰고 config.development.js 파일 중 일부 파일을 덮어 쓰려고합니다. 난 그냥 무시할 수 config.development.js (및 config.production.js)에서이 작업을 수행 할 수 있습니다 생각하고

var config = {};  

config.env = 'development'; 
config.hostname = 'example.dev'; 
config.appname = 'Example.com'; 
config.site_url = 'http://example.dev:8080'; 

module.exports = config; 

: 여기

는 예 config.development.js의

var config = require('config.global.js'); 

config.env = 'development'; 
config.hostname = 'example.dev'; 
config.appname = 'Example.com'; 
config.site_url = 'http://example.dev:8080'; 

module.exports = config; 

그리고 app.js에, 나는이 작업을 수행 할 수 있습니다 :

var cfg = require('config.' + (process.ENV.APP_ENV || 'development') + '.js'); 
app.set('domain', cfg.hostname); 

응용 프로그램의 구성을 정의하는 몇 가지 다른 방법은 무엇 변수?

+0

보통 환경 변수는'NODE_ENV'입니다. 그것 이외에, 이것은 괜찮아 보인다. 또한 변수를 모두 소문자()로 했으므로 변수가 모두 대문자이고 대소 문자가 구별되는 OS (Mac OS vs Linux) 인 경우 문제가 발생하지 않습니다. –

+0

변수를 소문자로 바꾸시겠습니까? NODE_ENV? – chovy

+0

'process.ENV.NODE_ENV.lowercase()'. 그건 그렇고 내가 정확히 기억한다면 Express에는 환경 변수에 대한 도움이된다. –

답변

3

모든 환경에 대한 설정으로 하나의 JSON 파일을 사용하지 않는 이유는 무엇입니까? 더 많은 환경을 도입 할 때 사용자의 접근 방식이 확장되지 않을 수 있습니다. NODE_ENV 속성을 검색하여 환경에서 속성 집합을 선택하여 올바른 속성 집합을 가져올 수 있습니다.

나는 얼마 전 Bootstraping a Node.js App for Dev/Prod Environment에 블로그를 올렸습니다. 수행 방법에 대한 예제는 구체적으로 ""()을 읽으십시오. 당신이 himanshu의 조언을 따라 하나의 설정 파일을 사용하는 경우

+0

내 접근법이 실제로 잘 확장한다고 생각합니다. 나는 config.global.js에있는 것만 덮어 씁니다. 왜 그것이 확장되지 않는다고합니까? – chovy

+0

당신의 접근 방식에서 이미'config.global.js','config.development.js'와'config.production.js '의 세 파일을 언급했습니다. 이 방법을 사용하면'staging','qa' 등과 같은 새로운 환경을 추가 할 때 새로운 js 파일을 만들어야합니다. 모든 속성을 JSON 파일에 저장하면 모든 파일이 여러 파일이 아닌 한 위치에 통합됩니다. 기본 속성을 원하면 JSON 파일에 기본 섹션을 추가 할 수 있습니다. 이제 env를 반환하는 도우미 함수를 작성하십시오. 특정 값. IF없는 경우. 특정 값이 존재하지만 기본값은 존재합니다. – himanshu

+0

당신의 요점을 봅니다. 환경이 더 많은 경우 파일 수를 늘릴 수 있습니다. 확실하지 어떻게 특정 글로벌 및 하나의 파일에서 재정의. – chovy

2

, 당신은 중복을 피하기 위해 프로토 타입 상속을 사용할 수 있습니다

var config = {};  

config.base = {}; 
config.base.env = 'development'; 
config.base.hostname = 'example.dev'; 
config.base.appname = 'Example.com'; 
config.base.site_url = 'http://example.dev:8080'; 

config.development = Object.create(config.base); 
config.development.debugLevel = 'high'; 
... 

config.production = Object.create(config.base); 
config.production.debugLevel = 'low'; 
... 

module.exports = config; 

Object.create() 지정된 프로토 타입 빈 객체를 새로 생성하는 ES5 기능입니다.

+0

환경에 어떻게 사용합니까? 나는 require ('/ config'). hostname을 할 수 있고 dev 또는 prod hostname을 얻을 수있을 것으로 기대한다. – chovy

+0

'var cfg = require ('./ config')와 비슷한 것 [process.ENV.APP_ENV || '개발']; ' – ebohlman

+0

그게 어디서나 할 필요가 성가신 종류의 cfg. 뭐든간에. 고마워, 나는 이것에 대해 생각할 것이다. 어쩌면 래퍼에서 자동 로딩을 할 수도 있습니다. – chovy

관련 문제