Cách đặt môi trường thông qua `ng phục vụ` trong Angular 6


169

Tôi đang cố gắng cập nhật ứng dụng Angular 5.2 của mình lên Angular 6. Tôi đã thực hiện thành công các hướng dẫn trong hướng dẫn cập nhật Angular (bao gồm cả bản cập nhật của angular-cliv6) và hiện tôi đang cố gắng phục vụ ứng dụng thông qua

ng serve --env=local

Nhưng điều này cho tôi lỗi:

Tùy chọn không xác định: '--env'

Tôi sử dụng nhiều môi trường ( dev/local/prod) và đây là cách nó hoạt động trong Angular 5.2. Làm cách nào tôi có thể thiết lập môi trường bây giờ trong Angular 6?


1
Phiên bản v6 của nó, bạn cập nhật angular-clicùng với toàn bộ ứng dụng, vì vậy tôi nghĩ nó rõ ràng:]
Martin Adámek

5
Rất hữu ích, Martin. Nhờ để chia sẻ hiểu biết của bạn. Trong thực tế, nó không phải là ít rõ ràng nhất.
Maxxx

Câu trả lời:


303

Bạn cần phải sử dụng mới configurationtùy chọn (công trình này cho ng buildng servecũng)

ng serve --configuration=local

hoặc là

ng serve -c local

Nếu bạn xem angular.jsontệp của mình , bạn sẽ thấy rằng bạn có quyền kiểm soát tốt hơn đối với các cài đặt cho từng cấu hình (aot, trình tối ưu hóa, tệp môi trường, ...)

"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"
      }
    ]
  }
}

Bạn có thể nhận thêm thông tin ở đây để quản lý các cấu hình cụ thể của môi trường.

Như được chỉ ra trong phản hồi khác bên dưới, nếu bạn cần thêm một 'môi trường' mới, bạn cần thêm một cấu hình mới cho tác vụ xây dựng và tùy thuộc vào nhu cầu của bạn, cho các nhiệm vụ phục vụthử nghiệm .

Thêm một môi trường mới

Chỉnh sửa : Để làm cho nó rõ ràng, thay thế tập tin phải được chỉ định trong buildphần. Vì vậy, nếu bạn muốn sử dụng ng servevới một environmenttệp cụ thể (giả sử dev2 ), trước tiên bạn cần sửa đổi buildphần để thêm cấu hình dev2 mới

"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
        },

Sau đó sửa đổi servephần của bạn để thêm một cấu hình mới, chỉ vào cấu hình dev2 build bạn vừa khai báo

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

Sau đó, bạn có thể sử dụng ng serve -c dev2, sẽ sử dụng tệp cấu hình dev2


Bạn có biết nếu có thể thêm cơ sở-href trong cấu hình không? hoặc chỉ trong ng xây dựng --c dàn dựng --base-href = / yyy /
Eduardo Tolino

@EduardoTolino: Có, bạn có thể, có một baseHreftùy chọn
David

Tôi có thể chỉ định cổng gỡ lỗi từ xa cho môi trường dev ở đâu? Vì vậy, để gỡ lỗi với VSCode. Trong Angular 6tất nhiên. Vì vậy, ng servelệnh bao gồm cổng gỡ lỗi từ xa khi khởi chạy Chrometrình duyệt.
Stephane

liên kết thông tin được cập nhật: github.com/angular/angular-cli/wiki/
Kẻ

1
ng phục vụ -c địa phương dành thời gian để biên dịch ứng dụng so với "ng phục vụ"
Vignesh

46

Câu trả lời này có vẻ tốt.
tuy nhiên, nó dẫn tôi đến một lỗi vì nó gây ra
Configuration 'xyz' could not be found in project ...
lỗi trong quá trình xây dựng.
Nó không chỉ cần thiết để cập nhật các cấu hình xây dựng , mà còn phục vụ các cấu hình .

Vì vậy, chỉ để lại không nhầm lẫn:

  1. --env không được hỗ trợ trong angular 6
  2. --envđã đổi thành --configuration| | -c(và bây giờ mạnh hơn)
  3. để quản lý các env khác nhau, ngoài việc thêm tệp môi trường mới, giờ đây cần phải thực hiện một số thay đổi trong angular.jsontệp:
    • thêm cấu hình mới trong xây dựng { ... "build": "configurations": ... bất động sản
    • cấu hình bản dựng mới có thể chỉ chứa fileReplacementsmột phần, (nhưng có nhiều tùy chọn hơn)
    • thêm cấu hình mới trong phục vụ { ... "serve": "configurations": ... bất động sản
    • cấu hình phục vụ mới sẽ chứabrowserTarget="your-project-name:build:staging"

8

Bạn co thể thử: ng serve --configuration=dev/prod

Để xây dựng sử dụng: ng build --prod --configuration=dev

Hy vọng bạn đang sử dụng một loại môi trường khác nhau.


ng phục vụ --configuration = lệnh dev / prod mất thời gian so với ng phục vụ tại sao?
Vignesh

ng phục vụ --configuration = prod mất nhiều thời gian hơn sau đó ng phục vụ --configuration = prod vì thu nhỏ tệp và do mã sẵn sàng sản xuất.
amku91

ok nếu tôi sử dụng lệnh "ng phục vụ --configuration = dev" có nghĩa là nó cũng mất nhiều thời gian hơn
Vignesh

Không, nó không nên mất nhiều thời gian hơn. Môi trường prod có thêm các bước để giảm thiểu, làm xấu đi và tối ưu hóa mã cho sản xuất. Các môi trường khác sẽ mất thời gian bình thường, trừ khi bạn kích hoạt rõ ràng các bước bổ sung này.
Reginaldo Camargo Ribeiro

6

Đối với Angular 2 - 5 hãy tham khảo bài viết Nhiều môi trường trong góc

Đối với sử dụng Angular 6 ng serve --configuration=dev

Lưu ý: Tham khảo cùng một bài viết cho góc 6 là tốt. Nhưng bất cứ nơi nào bạn tìm thấy --envthay vì sử dụng --configuration. Điều đó hoạt động tốt cho góc 6.


2

Bạn có thể sử dụng lệnh ng serve -c devcho môi trường phát triển ng serve -c prodcho môi trường sản xuất

trong khi xây dựng cũng áp dụng tương tự. Bạn có thể sử dụng ng build -c devđể xây dựng dev


2

Angular không còn hỗ trợ --env thay vào đó bạn phải sử dụng

ng serve -c dev

cho môi trường phát triển và,

ng serve -c prod 

cho việc sản xuất.

LƯU Ý: -choặc--configuration


Điều này đã được hỏi và trả lời năm trước, câu trả lời của bạn là sai, -c(với dấu gạch ngang đơn) hoặc --configuration(với dấu gạch ngang kép).
Martin Adámek

0

Sử dụng lệnh này cho Angular 6 để xây dựng

ng build --prod --configuration=dev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.