2013-08-16 2 views
2

grunt 작업을 기반으로 env 변수를 설정해야하는 webapp (emberjs)가 있습니다. 따라서 grunt server을 실행하면 development을 선택하고 URL은 localhost:5000으로 설정됩니다. 하지만 내가 grunt build 일 때 production을 선택하면 URL은 production.com으로 설정됩니다. 나를 위해grunt 작업을 기반으로 Env 변수를 설정하십시오.

주요 문제는 타다 남은에서 그 변수를 읽는 방법이다. 또는 어떻게 변수에 대한 불평 소리 보이게하고이 작업

가 그런 일을 할 수 있는가에 따라 변경?

답변

1

많은 검색 결과와 좋은 예가 없는데, 여기에 내가 한 일이 있습니다.

yo ember 발전기로 비계와 yeoman을 사용하고 grunt build을 사용하여 dist를 구축한다고 가정한다고 가정하십시오.

요 엠 발전기 v0.8은 툴툴 바꾸기 이용한다. 해당 버전으로 업그레이드하십시오. 간단히 말해서, 저는 글로벌 번즈를 index.html에 추가하기 위해 무언가 대체를 사용하고 있습니다. 방법은 다음과 같습니다.

결합-scripts.js 블록 전에 응용 프로그램/index.html을이 스크립트 태그를 추가

#app/index.html 
<script> 
    /* 
    simplify grunt-replace strategy by placing env vars here. 
    */ 
    window.MYCOMPANYCOM_ENV = { 
    env: '@@env', 
    apiHost: '@@apiHost' 
    }; 
</script> 

/* ADD THE ABOVE BEFORE THIS SECTION */ 
<!-- build:js(.tmp) scripts/main.js --> 
<script src="scripts/combined-scripts.js"></script> 
<!-- endbuild --> 

을 그리고 변경이에 Gruntfile.js에서 설정을 대체 :

module.exports = function (grunt) { 
    var appConfig = grunt.file.readJSON('app_config.json'); 

replace: { 
    app: { 
    options: { 
     patterns: [ 
     { 
      json: appConfig['app'] 
     } 
     ] 
    }, 
    files: [ 
     {src: '<%= yeoman.app %>/index.html', dest: '.tmp/index.html'} 
    ] 
    }, 
    dist: { 
    options: { 
     patterns: [ 
     { 
      json: appConfig['dist'] 
     } 
     ] 
    }, 
    files: [ 
     {src: '<%= yeoman.dist %>/index.html', dest: '<%= yeoman.dist %>/index.html'} 
    ] 
    } 
} 

것은 만들기 ./app_config.json의 새 파일

이제 앱 스크립트는 app_에 정의 된 전역 변수에 액세스 할 수 있습니다. config.json.

더 자세히 설명하지는 않겠지 만 개발 단계에서는 문제가 없습니다. grunt build의 경우, replace:dist 단계를 빌드 단계의 끝으로 이동하고 index.html의 @@ ember 변수를 bower 구성 요소의 경로로 바 꾸었습니다.

2

예, 가능합니다. grunt-env을 사용하여 grunt-usemin과 같은 환경을 지정하여 환경 변수를 응용 프로그램 코드에 노출 시키십시오.

this SO thread에 따르면 당신은 당신의 환경 변수가 Ember.js 이전에로드되었는지 확인해야합니다.

+0

emberjs 전에 설정되어있는 ENV 변수가 있습니다. grunt-env는 변수를 정의하는 데 좋습니다. 하지만 내가 선택한 곳에서 무딘 환경 변수를 어떻게 일치시킬 수 있습니까? 찾기 및 바꾸기와 같은 방법이 있습니까? 어떻게하면 서버를 구축하거나 실행하기 전에 변수를 특정 위치에 배치 할 수 있습니까? –

+0

[이 SO 스레드] (http://stackoverflow.com/questions/12401998/have-grunt-generate-index-html-for-different-setups)의 답변을 참조하십시오. 내 답변에 따라, 나는 당신이 당신의 앱에 환경 변수를 드러내 기 위해 [''grunt-usemin'] (https://npmjs.org/package/grunt-usemin)과 같은 것을 사용할 것을 제안했지만, [스레드 연결된] (http://stackoverflow.com/questions/12401998/have-grunt-generate-index-html-for-different-setups)이 고양이를 스킨 수있는 더 많은 방법이 있다는 것을 알 수 있습니다. –

관련 문제