Como definir o ambiente via `ng serve` no Angular 6

169

Estou tentando atualizar meu aplicativo Angular 5.2 para Angular 6. Segui com êxito as instruções no guia de atualização Angular (incluindo a atualização angular-clipara a v6) e agora estou tentando veicular o aplicativo via

ng serve --env=local

Mas isso me dá erro:

Opção desconhecida: '--env'

Eu uso vários ambientes ( dev/local/prod), e é dessa maneira que estava funcionando no Angular 5.2. Como posso definir o ambiente agora no Angular 6?

Martin Adámek
fonte
1
sua v6, você atualiza angular-clijunto com o aplicativo inteiro, então pensei que era óbvio:]
Martin Adámek
5
Muito prestativo, Martin. Obrigado por compartilhar sua visão. De fato, não é nem um pouco óbvio.
Maxxx

Respostas:

303

Você precisa usar a nova configurationopção (isso funciona para ng builde ng servetambém)

ng serve --configuration=local

ou

ng serve -c local

Se você olhar para o seu angular.jsonarquivo, verá que possui um controle mais preciso sobre as configurações de cada configuração (AOT, otimizador, arquivos de ambiente, ...)

"configurations": {
  "production": {
    "optimization": true,
    "outputHashing": "all",
    "sourceMap": false,
    "extractCss": true,
    "namedChunks": false,
    "aot": true,
    "extractLicenses": true,
    "vendorChunk": false,
    "buildOptimizer": true,
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
      }
    ]
  }
}

Você pode obter mais informações aqui para gerenciar configurações específicas do ambiente.

Conforme apontado na outra resposta abaixo, se você precisar adicionar um novo 'ambiente', precisará adicionar uma nova configuração à tarefa de construção e, dependendo de suas necessidades, ao serviço e teste tarefas de .

Adicionando um novo ambiente

Editar : para deixar claro, as substituições de arquivos devem ser especificadas na buildseção. Portanto, se você quiser usar ng serveum environmentarquivo específico (por exemplo, dev2 ), primeiro precisará modificar a buildseção para adicionar um novo dev2 configuração do

"build": {
   "configurations": {
        "dev2": {

          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.dev2.ts"
            }
            /* You can add all other options here, such as aot, optimization, ... */
          ],
          "serviceWorker": true
        },

Em seguida, modifique sua serveseção para adicionar uma nova configuração também, apontando para o dev2 build configuração você acabou de declarar

"serve":
      "configurations": {
        "dev2": {
          "browserTarget": "projectName:build:dev2"
        }

Então você pode usar ng serve -c dev2, o que usará o arquivo de configuração dev2

David
fonte
você sabe se é possível adicionar também base-href nas configurações? ou apenas em ng build --c staging --base-href = /
aaaa
@EduardoTolino: Sim, você pode, existe uma baseHrefopção
David
Onde eu poderia especificar a porta de depuração remota para o ambiente de desenvolvimento? Para depurar com VSCode. Em Angular 6claro. Para que o ng servecomando inclua a porta do depurador remoto ao iniciar o Chromenavegador.
Stephane
link de informação atualizado: github.com/angular/angular-cli/wiki/…
Mateo Tibaquira
1
ng serve -c local leva um tempo para compilar o aplicativo comparando com "ng serve"
Vignesh
46

Essa resposta parece boa.
no entanto, isso me levou a um erro, pois resultou em
Configuration 'xyz' could not be found in project ...
erro na compilação.
É necessário não apenas atualizar configurações de compilação , mas também servir outras.

Então, só para não deixar confusões:

  1. --env não é suportado em angular 6
  2. --envfoi alterado para --configuration|| -c(e agora é mais poderoso)
  3. Para gerenciar vários envs, além de adicionar um novo arquivo de ambiente, agora é necessário fazer algumas alterações no angular.jsonarquivo:
    • adicione nova configuração na propriedade build { ... "build": "configurations": ...
    • a nova configuração de compilação pode conter apenas fileReplacementsparte (mas há mais opções disponíveis)
    • adicione nova configuração na propriedade servir { ... "serve": "configurations": ...
    • nova configuração de saque deve conterbrowserTarget="your-project-name:build:staging"
garfunkel61
fonte
8

Podes tentar: ng serve --configuration=dev/prod

Para construir use: ng build --prod --configuration=dev

Espero que você esteja usando um tipo diferente de ambiente.

amku91
fonte
O comando ng serve --configuration = dev / prod leva um tempo comparado ao ng serve por que?
Vignesh
ng serve --configuration = prod leva mais tempo do que ng serve --configuration = prod devido à minimização do arquivo e devido ao código pronto para produção.
amku91
ok se eu usar "ng servir --configuration = dev" comando significa a sua também tendo mais tempo
Vignesh
Não, não deve demorar mais tempo. O ambiente de prod possui etapas extras para minimizar, aumentar e otimizar o código de produção. Os outros ambientes devem levar o tempo normal, a menos que você ative explicitamente essas etapas extras.
Reginaldo Camargo Ribeiro
6

Para Angular 2 - 5, consulte o artigo Multiple Environment in angular

Para uso em Angular 6 ng serve --configuration=dev

Nota: Consulte também o mesmo artigo para o angular 6. Mas onde quer que você encontre, --envuse --configuration. Isso funciona bem para o angular 6.

Prasanth Venkatesan
fonte
2

Você pode usar o comando ng serve -c devpara o ambiente de desenvolvimento ng serve -c prod para de produção

enquanto a construção também se aplica. Você pode usar ng build -c devpara a compilação do desenvolvedor

Shridhar Acharya
fonte
2

Angular não suporta mais --env, você deve usar

ng serve -c dev

para o ambiente de desenvolvimento e,

ng serve -c prod 

para produção.

NOTA: -cou--configuration

Shilpa Soni
fonte
Isso foi perguntado e respondido ano atrás, também a sua resposta está errada, é -c(com traço único) ou --configuration(com traços duplos).
Martin Adámek
0

Use este comando para Angular 6 para criar

ng build --prod --configuration=dev
Sateesh
fonte