Подтвердить что ты не робот

Могу ли я передавать аргументы в angular -cli во время сборки

Я хотел бы передать пользовательские аргументы angular-cli при создании приложения Angular2 (typescript). Это возможно? Как я могу получить доступ к этим аргументам в своем коде?

Сценарий выглядит следующим образом: у меня есть одно приложение Angular2 с двумя макетами. Каждый макет имеет 3 цвета (красный, синий, зеленый). Я хочу построить все возможные комбинации. Одно приложение для макета и цвет = > layout1red, layout1green, layout2blue,...

Я хочу создать 6 конфигурационных файлов JSON для каждой сборки, где я определяю макет и цвет, а также некоторые дополнительные свойства.

4b9b3361

Ответ 1

Можно создать несколько файлов конфигурации с помощью @angular/cli.

Как уже упоминалось в документации, пользовательские файлы конфигурации могут быть добавлены следующим образом:

  • создать src/environments/environment.NAME.ts
  • добавьте { "NAME": 'src/environments/environment.NAME.ts' } к объекту apps[0].environments в .angular-cli.json
  • используйте их с помощью --env=NAME в командах build/serve.

Итак, вам, вероятно, понадобится 6 конфигурационных файлов для dev и 6 конфигурационных файлов для prod.

А затем для доступа к этим переменным просто импортируйте объект environment.ts из файла environment.ts.

Ответ 2

Я не получил ваш вопрос полностью, я могу придумать два способа сделать это:

A- Передача аргументов при создании нового проекта:

1- Чтобы иметь возможность передавать аргументы в угловую точку, вам нужно понять, где вы хотите, чтобы это использовалось.

Если эти конфигурации используются в вашем макете, вы можете раскошелиться на Angular cli и обновить его план и легко добавить свою собственную конфигурацию.

Вот план компонентов:

     angular-cli/packages/@angular/cli/blueprints/component/files/__path__/__name__.component.ts

Который выглядит так:

@Component({
  selector: '<%= selector %>',<% if(inlineTemplate) { %>
  template: '

Вы видите selector? что имя компонента, с которым вы можете играть, и в конце, когда вы создаете новый проект, вы можете передать свои собственные флаги и использовать его.

Но это не лучшая идея, потому что вы всегда в беде, когда Angular Cli обновляется.

2- Другое возможное решение - использовать ng eject

Это создаст конфигурацию webpack в отдельном файле и webpack ее в корневую папку вашего проекта, после чего вы сможете поиграть с этим файлом и предоставить свою конфигурацию и настроить ее для своего приложения.

Но опять же, я не уверен, как вы хотите использовать эту конфигурацию.

Это идеальный кандидат для вашей конфигурации во build time.

3- Используйте конфигурацию environments:

Как уже было сказано, это также очень удобно для настройки build time:

Следуйте ответу @mikedanylov а затем используйте его в своих файлах:

import { environment } from './environments/environment';

if(environment.colorRed==='blue'){

     console.log('the color is blue');

}


 npm build -e=colorRed

B: Run time:

Это лучший вариант, вы можете создать вызов в вашем index.html следующим образом:

  <script src="wherever/configurations/blue"></script>

а затем внутри конфигурации вы можете иметь:

  var configuration = {
      whatEver:"blue"
  }

и поскольку это скрипт, он будет доступен везде, и вы можете получить к нему доступ в своих компонентах:

export class MyComponent{


    ngOnInit(){
        console.log('colour is : '+window['configuration.whatEver']); // obviously you can improve this and create type definitions and what not.
    }
}

Это даст вам больше гибкости при обновлении конфигурации в будущем без необходимости повторной сборки приложения.

Очевидно, что вы можете сделать такой же вызов с помощью вызова Ajax, но я считаю, что выше более независимым от приложений.