2017-03-13 3 views
0

Ember CLI에는 개발, 테스트 및 생산 환경이 있습니다. 테스트 및 프로덕션 서버가 있습니다. 그리고 프로덕션 환경에서와 같이 테스트 서버에서 빌드해야하지만 다른 환경에서는 configs가 필요합니다. 그러나 자동 테스트에 사용되는 Ember CLI의 테스트 환경. Ember-CLI를위한 준비 환경을 만드는 방법은 무엇입니까?

나는 ember-cli-build.js 파일에 다음 옵션을 사용하여 테스트 서버에서 ember build --environment development 전화를 시도 :

var app = new EmberApp(defaults, { 
    // Add options here 
    fingerprint: { 
    prepend: 'https://s-test.mycdn.com/', 
    enabled: true 
    } 
}); 

하지만 오류가 발생했습니다 :

The Broccoli Plugin: [AssetRewrite] failed with: 
TypeError: Cannot read property '2' of null 
..... 
The broccoli plugin was instantiated at: 
..... 

테스트 서버에서 타다 남은 응용 프로그램을 구축하는 올바른 방법은 무엇입니까?

+1

try'ember build --environment = development' 누락되었습니다'=' – kumkanillam

답변

1

불행히도 ember-cli의 환경 지원은 좋지 않습니다. 당신은 개발과 생산만을하고 새로운 것을 추가 할 수 없습니다. 또한 제작 빌드에서는 테스트/스테이징 서버에서 필요하지 않고 시간이 많이 소요되는 소형화, 지문 인식 등과 같은 추가 작업을 수행합니다.

좋은 소식은 environment.js 내의 Node API에 액세스 할 수 있다는 것입니다. 사실 environment.js는 노드 모듈입니다. 이를 통해 ember build에 매개 변수를 추가하고 구문 분석 할 수 있습니다. 나는 successively ember-cli 2.7에서이 트릭을 사용하고 2.8에서도 사용했다. minimist를 설치

  1. :

    var argv = require('minimist')(process.argv.slice(2)); 
    console.log('Sub-environment is set to ' + argv.subenv); 
    
  2. 다른 인식 environment.js에서
  3. 사용 argv.subenv "하위 : npm install minimist --save-dev

  4. 이 environment.js의 시작 부분에이 코드를 추가하는 방법이 필요합니다 환경 ". 나는 "환경"블록 한 후이 작업을 수행하는 것이 좋습니다 :

    if (argv.subenv === 'mirage') { 
        ENV['ember-cli-mirage'] = { 
         enabled: true 
        }; 
    
        ENV.API.namespace = ''; 
        ENV.API.host = ''; 
    } 
    
    if (argv.subenv === 'staging') { 
    
        ENV['ember-cli-mirage'] = { 
         enabled: false 
        }; 
    
        ENV.API.host = 'https://your-server.com/'; 
        ENV.API.namespace = ''; 
    } 
    

    당신이 필요로하는 당신은 당신의 코드에서 environmentargv.subenv을 결합 할 수 있습니다.

  5. 건물 할 때 인수를 사용하십시오 : ember build --environment=development --subenv=staging. Ember-cli는 지원되지 않는 인수에 대한 경고를 출력하지만 모든 것이 잘 작동합니다.

이 방법을 사용하면 필요한만큼 서버를 확보하고 그 중 하나에 개발/프로덕션 버전의 응용 프로그램을 빌드 할 수 있습니다. 당신의 오류에 대해서는

, 나는 아마 당신이 PARAM이 staging 같을 때 사용자 환경을 설정하는 것이 here

-1

을 편집 config/environment.js을 찾을 수 있습니다, 그 원인이 무엇인지 확실하지 않다.예를 들어

`` 기능 (환경) {

var ENV = { 
    // SET ENV properties 
    APP: { 
     // Here you can pass flags/options to your application instance 
     // when it is created 
    }, 
    contentSecurityPolicy: { 
     // Configure security 
    } 
}; 

if (environment === 'production') { 
    // Set production values 
} 

if (environment === 'staging') { 
    // Set staging values 
} 

if (environment === 'development') { 
    // Set staging values 
} 

if (environment === 'test') { 
    // Set testing values 
} 

return ENV; 

};

```다음

그리고 버전은 다음 명령을 사용하여 구축을 위해 노력 :

ember build --environment="staging"

1

이 혼란 스러울 수 있지만, 당신이 원하는 것은 하지 환경입니다 수 있습니다. 배포 대상을 원합니다. 이 두 블로그의 차이점에 대한 블로그 게시물은 다음과 같습니다 : Do not confuse environment for deploy target.

엠버에서는 환경 코드가 축소 된 방법, 당신의 자산 등 특정 디버깅 기능을 활성화/비활성화, 지문을 채취하고 있습니다에 대한 있습니다 그들은 당신이 당신이 원하는 API URL 코드를 배포 할 위치에 대한 하지 있습니다 사용 또는 그와 비슷한 것.

당신은 test 또는 development라는 서버가 일어날 수 있지만 이러한 서버에 배포 할 때, 당신은 항상 production하지 test 또는 development로 환경을 설정해야합니다.

여러 서버 (배포 대상)를 지원하려면 env vars를 사용하십시오. 뭔가 같이 :

DEPLOY_TARGET=development ember build --environment=production 
DEPLOY_TARGET=test ember build --environment=production 
DEPLOY_TARGET=staging ember build --environment=production 
DEPLOY_TARGET=production ember build --environment=production 

그리고 당신의 ember-cli-deploy.js에, 당신은 단순히 다음과 같이 process.env.DEPLOY_TARGET를 통해 값에 액세스 :이 프로세스를 자동화 ember-cli-deploy 부가 기능을 사용하는 것이 좋습니다

const deployTarget = process.env.DEPLOY_TARGET; 
if (deployTarget === 'development') { 
    // ... 
} else if (deployTarget === 'test') { 
    // ... 
} else if (deployTarget === 'staging') { 
    // ... 
} else if (deployTarget === 'production') { 
    // ... 
} 

, 당신은 단지 ember deploy staging을 입력 할 수 있도록 staging에 대한 빌드를 만들고 배포하십시오.