node.js + express.js + everyauth.js를 사용하고 있습니다. 모든 everyauth 로직을 모듈 파일로 옮겼습니다.
var login = require('./lib/everyauthLogin');
이 내부에서 키 / 비밀 조합으로 내 oAuth 구성 파일을로드합니다.
var conf = require('./conf');
.....
twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
이러한 코드는 콜백이 다른 URL에 있으므로 개발 / 스테이징 / 프로덕션과 같이 환경에 따라 다릅니다.
Qu. 모든 모듈을 필터링하도록 환경 구성에서 어떻게 설정합니까? 아니면 모듈에 직접 경로를 전달할 수 있습니까?
환경에서 설정 :
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
통과
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
? 말이되는 희망
답변
내 솔루션,
다음을 사용하여 앱로드
NODE_ENV=production node app.js
그런 다음 config.js
객체가 아닌 함수로 설정
module.exports = function(){
switch(process.env.NODE_ENV){
case 'development':
return {dev setting};
case 'production':
return {prod settings};
default:
return {error or other settings};
}
};
그런 다음 Jans 솔루션에 따라 파일을로드하고 필요한 경우 값을 전달할 수있는 새 인스턴스를 만듭니다.이 경우 process.env.NODE_ENV
에는 전역이므로 필요하지 않습니다.
var Config = require('./conf'),
conf = new Config();
그런 다음 이전과 똑같이 구성 개체 속성에 액세스 할 수 있습니다.
conf.twitter.consumerKey
답변
최상위 레벨로 NODE_ENV가있는 JSON 파일을 가질 수도 있습니다. IMO는 구성 설정을 표현하는 더 좋은 방법입니다 (설정을 반환하는 스크립트를 사용하는 것과 반대).
var config = require('./env.json')[process.env.NODE_ENV || 'development'];
env.json의 예 :
{
"development": {
"MONGO_URI": "mongodb://localhost/test",
"MONGO_OPTIONS": { "db": { "safe": true } }
},
"production": {
"MONGO_URI": "mongodb://localhost/production",
"MONGO_OPTIONS": { "db": { "safe": true } }
}
}
답변
매우 유용한 솔루션은 config 모듈을 사용하는 것 입니다.
모듈 설치 후 :
$ npm install config
default.json 구성 파일을 만들 수 있습니다 . (확장자 .json5를 사용하여 JSON 또는 JS 객체를 사용할 수 있습니다)
예를 들면
$ vi config/default.json
{
"name": "My App Name",
"configPath": "/my/default/path",
"port": 3000
}
이 기본 구성은 환경 구성 파일 또는 로컬 개발 환경의 로컬 구성 파일에 의해 재정의 될 수 있습니다.
production.json 은 다음과 같을 수 있습니다.
{
"configPath": "/my/production/path",
"port": 8080
}
development.json 은 다음과 같을 수 있습니다.
{
"configPath": "/my/development/path",
"port": 8081
}
로컬 PC에서 모든 환경을 재정의 하는 local.json 을 가질 수도 있고 특정 로컬 구성을 local-production.json 또는 local-development.json 으로 가질 수도 있습니다 .
앱 내부
앱에서는 구성과 필요한 속성 만 필요합니다.
var conf = require('config'); // it loads the right file
var login = require('./lib/everyauthLogin', {configPath: conf.get('configPath'));
앱로드
다음을 사용하여 앱을로드합니다.
NODE_ENV=production node app.js
또는 forever 또는 pm2로 올바른 환경 설정
영원히:
NODE_ENV=production forever [flags] start app.js [app_flags]
PM2 (쉘을 통해) :
export NODE_ENV=staging
pm2 start app.js
PM2 (.json을 통해) :
process.json
{
"apps" : [{
"name": "My App",
"script": "worker.js",
"env": {
"NODE_ENV": "development",
},
"env_production" : {
"NODE_ENV": "production"
}
}]
}
그리고
$ pm2 start process.json --env production
이 솔루션은 매우 깨끗하며 프로덕션 / 스테이징 / 개발 환경 및 로컬 설정에 대해 서로 다른 구성 파일을 쉽게 설정할 수 있습니다.
답변
간단히
이러한 종류의 설정은 간단하고 우아합니다.
env.json
{
"development": {
"facebook_app_id": "facebook_dummy_dev_app_id",
"facebook_app_secret": "facebook_dummy_dev_app_secret",
},
"production": {
"facebook_app_id": "facebook_dummy_prod_app_id",
"facebook_app_secret": "facebook_dummy_prod_app_secret",
}
}
common.js
var env = require('env.json');
exports.config = function() {
var node_env = process.env.NODE_ENV || 'development';
return env[node_env];
};
app.js
var common = require('./routes/common')
var config = common.config();
var facebook_app_id = config.facebook_app_id;
// do something with facebook_app_id
프로덕션 모드에서 실행하려면 다음을 수행하십시오.
$ NODE_ENV=production node app.js
상세히
이 솔루션은 http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for-dev-slash-prod-environment/ 에서 확인하십시오. 자세한 세부 사항.
답변
이를 수행하는 방법은 환경으로 앱을 시작할 때 인수를 전달하는 것입니다. 예를 들면 :
node app.js -c dev
그런 다음 app.js에서 dev.js
구성 파일 로로드 합니다. optparse-js를 사용 하여 이러한 옵션을 구문 분석 할 수 있습니다 .
이제이 구성 파일에 의존하는 몇 가지 핵심 모듈이 있습니다. 다음과 같이 작성할 때 :
var Workspace = module.exports = function(config) {
if (config) {
// do something;
}
}
(function () {
this.methodOnWorkspace = function () {
};
}).call(Workspace.prototype);
그리고 다음과 app.js
같이 호출 할 수 있습니다 .
var Workspace = require("workspace");
this.workspace = new Workspace(config);
답변
우아한 방법은 .env
파일 을 사용 하여 프로덕션 설정을 로컬로 재정의하는 것입니다. 명령 줄 스위치가 필요하지 않습니다. config.json
파일 에있는 모든 쉼표와 대괄호는 필요하지 않습니다 . 여기에서 내 대답보기
예 : 내 컴퓨터에서 .env
파일은 다음과 같습니다.
NODE_ENV=dev
TWITTER_AUTH_TOKEN=something-needed-for-api-calls
내 로컬 .env
은 모든 환경 변수를 재정의합니다. 그러나 스테이징 또는 생산 서버에 변수가 무대에 미리 설정되어있는 환경 (어쩌면 그들은 heroku.com에있어) NODE_ENV=stage
또는 생산 NODE_ENV=prod
.
답변
배포 서버에서 환경 변수를 설정합니다 (예 : NODE_ENV = production과 같음). process.env.NODE_ENV를 통해 환경 변수에 액세스 할 수 있습니다. 글로벌 설정에 대한 다음 구성 파일을 찾으십시오.
const env = process.env.NODE_ENV || "development"
const configs = {
base: {
env,
host: '0.0.0.0',
port: 3000,
dbPort: 3306,
secret: "secretKey for sessions",
dialect: 'mysql',
issuer : 'Mysoft corp',
subject : 'some@user.com',
},
development: {
port: 3000,
dbUser: 'root',
dbPassword: 'root',
},
smoke: {
port: 3000,
dbUser: 'root',
},
integration: {
port: 3000,
dbUser: 'root',
},
production: {
port: 3000,
dbUser: 'root',
}
};
const config = Object.assign(configs.base, configs[env]);
module.exports= config;
base는 모든 환경에 대한 공통 구성을 포함합니다.
그런 다음 다른 모듈에서 가져옵니다.
const config = require('path/to/config.js')
console.log(config.port)
해피 코딩 …