2016-08-12 1 views
0

Gulp를 사용하여 빌드 프로세스 중에 환경 변수를 설정하고 있지만 일단 내 앱이 시작되면 env 변수가 비어 있습니다. 내 꿀꺽 작업에 ENV()를 실행 한 후룰을 사용하여 환경 변수를 설정 한 후 환경 변수가 재설정되는 이유는 무엇입니까?

gulpfile.js

gulp.task('build', function() { 
    if (fileExists('.env.json')) { 
    console.log('Setting environment variables'); 
    env({ 
     file: '.env.json', 
     vars: {"DB_NAME": "nbadbtest"} 
    }); 
    console.log("DB_NAME=%s", process.env.DB_NAME); // DB_NAME=TestDB 
    } else { 
    console.log('.env.json file not found. Not setting environment variables.') 
    } 
    var tsProject = ts.createProject(path.resolve('./tsconfig.json')); 
    var tsResult = tsProject.src().pipe(ts(tsProject)); 
    return tsResult.js.pipe(gulp.dest('dist')); 
}) 

, 나는 process.env.DB_NAME가 "를 TestDB"로 설정되어 있음을 볼 수 있습니다.

server.ts

console.log("DB_NAME=%s", process.env.DB_NAME); // DB_NAME=undefined

즉시 server.ts 내 수입 후, 나는 다시 ENV var에 로그하지만,이 시간은 정의되지 않은입니다.

[22시 6분 28초] 빌드 '...
환경 변수 설정을 시작
DB_NAME = nbadbtest
[22시 6분 32초] 가공 된 다음

단자에서 출력의 3.26 S
> 노드 DIST/server.js

DB_NAME 후 '빌드'= 미정

+0

참고로, 나는 맥 OS X 엘 카피 탄 V10에 비주얼 스튜디오 코드로 일하고 있어요. 11.6 –

답변

0

이것은 환경 변수가 설정되기 전에 이미 열려있는 노드 응용 프로그램을 시작하는 터미널 창 때문입니다. 내가 npm start을 실행할 때, 나는 그 환경 변수를 설정하는 gulp에서 빌드 작업을 시작하는 "사전 시작"npm 스크립트를 가지고 있습니다. 따라서 gulp buildnode dist/server.js은 동일한 터미널 창에서 실행됩니다.

gulp build을 실행 한 다음 실행하려면 새 터미널 창을여십시오. node dist/server.js은 새 터미널 창에 설정된 환경 변수에 대한 액세스 권한이 있으므로이 문제를 해결합니다.

gulp를 통해 환경 변수를 설정하는 대신 지금 dotenv를 사용하고 있습니다. 난 그냥 내 모든 환경 변수와 .env의 파일을 만들고과 같이 내 server.js 파일에 dotenv 구성 :

require('dotenv').config();

관련 문제