2016-03-01 29 views
123

Tôi mới đến Angular2, tôi đã đọc câu hỏi giải quyết và tôi thấy điều nàyLàm thế nào để kích hoạt chế độ sản xuất ở góc 2

Angular2 method binding error: "value has changed after it was checked"

mà là rất thú vị, nhưng câu hỏi của tôi là làm thế nào tôi có thể thay đổi từ phát triển để sản xuất, Nó là có sự khác biệt sau khi đọc câu hỏi này

What is difference between production and development mode in Angular2?

tôi đã tìm kiếm nhưng không thấy gì để chỉ ra rằng chế độ, và nơi bạn có để chỉ chế độ (phát triển) hoặc chế độ (sản xuất).

trong bảng điều khiển Tôi có thể thấy ....Call enableProdMode() to enable the production mode. nhưng ở đâu trong System.config({ hoặc trong các lớp thành phần.

Có cần nhập cụ thể không?

+0

tôi thấy nó điên cấu hình qua sử dụng Webpack 2+ Angular2 và nguyên cảo, tạo ra một giải pháp đơn giản : https://github.com/Sweetog/yet-another-angular2-boilerplate –

Trả lời

151

Bạn kích hoạt nó bằng cách nhập và thực hiện các chức năng (trước khi gọi bootstrap):

import {enableProdMode} from '@angular/core'; 

enableProdMode(); 
bootstrap(....); 

Nhưng lỗi này là chỉ báo rằng có điều gì đó sai trái với cam kết ràng buộc của bạn, vì vậy bạn không nên chỉ bỏ qua nó, nhưng cố gắng để tìm ra lý do tại sao nó xảy ra.

+0

Làm thế nào để enableProdMode() nếu bạn không sử dụng typescript? Nếu tôi chỉ gọi phương thức này trước khi ng.platform.browser.bootstrap (...) tôi nhận được lỗi này: enableProdMode không được định nghĩa –

+2

@DanielDudas Tôi không sử dụng es5, nhưng hãy thử 'ng.core.enableProdMode()' – Sasxa

+3

Tôi tin rằng "angular2/core" bây giờ là "@ angular/core". Xem câu trả lời của tôi dưới đây. – adampasz

45

này đã làm việc cho tôi, bằng cách sử dụng phiên bản mới nhất của góc 2 (2.0.0-rc.1):

main.ts

import {enableProdMode} from '@angular/core'; 

enableProdMode(); 
bootstrap(....); 

Đây là tài liệu tham khảo chức năng từ tài liệu của họ : https://angular.io/api/core/enableProdMode

+1

liên kết mới: https://angular.io/docs/ts/latest/api/core/index/enableProdMode-function.html – emp

+0

@emp Tôi ngạc nhiên khi tài liệu chính thức của Angular cho 'enableProdMode' không cho bạn biết * nơi * bạn phải gọi nó. – Dai

35

Cách tốt nhất để bật chế độ sản xuất cho ứng dụng Góc 2, là sử dụng angular-cli và tạo ứng dụng với ng build -prod. Điều này sẽ xây dựng ứng dụng với hồ sơ sản xuất. Sử dụng angular-cli có lợi ích khi có thể sử dụng chế độ phát triển bằng cách sử dụng ng serve hoặc ng build trong khi phát triển mà không phải thay đổi mã mọi lúc.

30

Khi tôi xây dựng một dự án mới bằng angular-cli. Một tệp được bao gồm có tên là environment.ts. Bên trong tập tin này là một biến như vậy.

export const environment = { 
    production: true 
}; 

Sau đó, trong main.ts bạn có điều này.

import './polyfills.ts'; 
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 
import { enableProdMode } from '@angular/core'; 
import { environment } from './environments/environment'; 
import { AppModule } from './app/'; 

if (environment.production) { 
    enableProdMode(); 
} 

platformBrowserDynamic().bootstrapModule(AppModule); 

Bạn có thể thêm video này vào một dự án phi góc-cli, tôi sẽ giả định, bởi vì enableProdMode() đang được nhập khẩu từ @ góc/lõi.

+0

Tính năng này hoạt động như thế nào đối với việc xây dựng phi sản phẩm? Tôi giả định trong trường hợp đó environment.ts được bỏ qua, do đó, bạn không nhận được một lỗi biên dịch tsc khi cố gắng để nhập khẩu các mô-đun? – llasarov

+0

@llasarov environment.ts chỉ hoạt động như một tệp cấu hình, trong đó bạn có thể bật/tắt chế độ sản xuất. Main.ts chỉ gọi enableProdMode nếu nó đúng, vì vậy điều này có thể được thực hiện mà không cần bất kỳ quá trình xây dựng cụ thể nào. Bạn cũng có thể chọn đăng nhập ở đây, bằng cách kiểm tra xem logMode có debug hay không thì dịch vụ logger tùy chỉnh của bạn thực hiện một StackTrace chi tiết khác chỉ cần đăng nhập một lớp lót – Nitin

2

Đối với những người làm con đường nâng cấp mà không có cũng chuyển sang sử dụng nguyên cảo:

ng.core.enableProdMode() 

Đối với tôi (trong javascript) này trông giống như:

var upgradeAdapter = new ng.upgrade.UpgradeAdapter(); 
ng.core.enableProdMode() 
upgradeAdapter.bootstrap(document.body, ['fooApp']); 
0

dự án kiễu góc 2 của tôi không có tệp "main.ts" đã đề cập đến các câu trả lời khác, nhưng nó có một "khởi động.ts "tập tin, mà dường như là về cùng một điều. (Sự khác biệt có lẽ là do các phiên bản khác nhau của Angular.)

Thêm hai dòng sau khi chỉ thị import cuối cùng làm việc cho tôi:

import { enableProdMode } from "@angular/core"; 
enableProdMode(); 
2

đến src/enviroments/enviroments.ts và kích hoạt chế độ sản xuất

export const environment = { 
    production: true 
}; 

cho góc 2

1

Bạn không cần bất kỳ tệp môi trường nào hoặc tệp đó sẽ được cung cấp bởi dự án hạt giống của bạn. Chỉ cần có một configuration.ts và thêm vào tất cả các mục yêu cầu quyết định thời gian chạy (ví dụ: - cấu hình ghi nhật ký và các url). Điều này sẽ phù hợp với bất kỳ cấu trúc thiết kế và cũng giúp đỡ trong tương lai

configuration.ts

export class Configuration { 

    isInProductionMode : bool = true; 

    // other configuration 
    serviceUrl : string = "http://myserver/myservice.svc"; 
    logFileName : string = "..."; 
} 

// Bây giờ sử dụng trong mã khởi động (main.ts của bạn hoặc tương đương theo thiết kế dự án hạt

import { Configuration } from './configuration'; 
import { enableProdMode } from '@angular/core'; 
.... 
if (Configuration.isInProductionMode) 
    enableProdMode(); 
+1

làm thế nào để phân biệt prod/dev với 'isInProductionMode' thành true/false? trong thời gian xây dựng? –

+0

Thông thường dưới dạng tham số GULP hoặc tương đương – Nitin

+0

JSON có mục nhập như sau: - "environmentSource": "environment/environment.ts", "môi trường": { "dev": "environment/environment.ts", " prod ":" environment/environment.prod.ts " } – Nitin

1

Hầu hết các chế độ thời gian sản là không cần thiết trong suốt thời gian phát triển. Vì vậy, cách giải quyết của chúng tôi là chỉ cho phép nó khi nó là kHÔNG localhost.

Trong trình duyệt của bạn main.ts nơi bạn xác định AppModule gốc của bạn:

const isLocal: boolean = /localhost/.test(document.location.host); 
!isLocal && enableProdMode(); 
platformBrowserDynamic().bootstrapModule(AppModule); 

Các isLocal cũng có thể được sử dụng cho các mục đích khác như enableTracing cho RouterModule cho tốt hơn gỡ lỗi stack trace trong giai đoạn dev.

1

Khi ng lệnh xây dựng được sử dụng nó ghi đè lên tập tin environment.ts

Theo mặc định khi ng xây dựng lệnh được sử dụng nó thiết lập dev môi trường

Để sử dụng môi trường sản xuất, sử dụng sau lệnh ng xây dựng - -env = prod

này sẽ kích hoạt chế độ sản xuất và tự động cập nhật tập tin environment.ts

Các vấn đề liên quan