วิธีเปิดใช้งานโหมดการผลิต


182

ฉันอ่านคำถามที่เกี่ยวข้องและพบคำถามนี้แต่คำถามของฉันคือฉันจะเปลี่ยนจากการพัฒนาเป็นโหมดการผลิตได้อย่างไร มีความแตกต่างบางอย่างระหว่างโหมดที่มีการชี้ให้เห็นเป็นที่นี่

ในคอนโซลฉันเห็น....Call enableProdMode() to enable the production mode.แต่ฉันไม่แน่ใจว่าอินสแตนซ์ของประเภทใดที่ฉันควรเรียกใช้วิธีการนั้น

ใครสามารถตอบคำถามนี้ได้ไหม


ฉันพบว่าการกำหนดค่าผ่านบ้าโดยใช้ Webpack 2+ Angular2 และ Typescript สร้างวิธีแก้ปัญหาง่ายๆ: github.com/Sweetog/yet-another-angular2-boilerplate
Brian Ogden

คำตอบ:


211

คุณเปิดใช้งานได้โดยการนำเข้าและดำเนินการฟังก์ชั่น (ก่อนที่จะเรียก bootstrap):

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

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

แต่ข้อผิดพลาดนี้เป็นตัวบ่งชี้ว่ามีบางอย่างผิดปกติกับการผูกของคุณดังนั้นคุณไม่ควรเพียงแค่ยกเลิกมัน แต่ลองคิดดูว่าทำไมมันถึงเกิดขึ้น


วิธีการเปิดใช้งาน ProdMode () ถ้าคุณไม่ได้ใช้ typescript ถ้าฉันเพิ่งเรียกวิธีนี้ก่อน ng.platform.browser.bootstrap (... ) ฉันได้รับข้อผิดพลาดนี้: enableProdMode ไม่ได้กำหนดไว้
Daniel Dudas

2
@DanielDudas ฉันไม่ได้ใช้ es5 แต่ลองng.core.enableProdMode()
Sasxa

3
ฉันเชื่อว่า "angular2 / core" คือตอนนี้ "@ angular / core" ดูคำตอบของฉันด้านล่าง
adampasz

ฉันใช้ Ionic2 ไฟล์บูตนี้เรียกว่าไฟล์อะไร? เมื่อฉันสร้างแอพตัวอย่างionic start test sidemenu --v2 --tsฉันเห็นapp.tsแต่ฟังก์ชั่นบูตสแตรปนี้เรียกว่าที่ไหน?
Guus

1
ฉันทำแบบเดียวกัน แต่ฉันได้รับข้อยกเว้นเช่น "ไม่สามารถเปิดใช้งานโหมด prod หลังจากตั้งค่าแพลตฟอร์ม" ใครสามารถช่วยฉันในการแก้ไขปัญหานี้ได้บ้าง
Gowtham

81

วิธีที่ดีที่สุดที่จะเปิดใช้งานโหมดการผลิตสำหรับเชิงมุม 2 โปรแกรมคือการใช้เชิงมุม-CLIng build --prodและสร้างแอพลิเคชันที่มี สิ่งนี้จะสร้างแอปพลิเคชันที่มีโปรไฟล์การผลิต การใช้ angular-cli มีประโยชน์ในการใช้โหมดการพัฒนาโดยใช้ng serveหรือng buildในขณะที่กำลังพัฒนาโดยไม่ต้องเปลี่ยนรหัสตลอดเวลา


6
ฉันใช้ Angular 6 และเป็น ng build --prod เพื่อสร้างในโหมด prod เพียงแค่วางสิ่งนี้ไว้ที่นี่สำหรับผู้มาใหม่ที่เข้ามาที่หน้านี้
Verbose

ฉันคิดว่าบิลด์ --prodถูกนำมาใช้เพื่อรักษา isDevMode และ enableProdMode คำตอบนี้ควรถูกทำเครื่องหมายเป็นคำตอบ
bubi

58

สิ่งนี้ใช้ได้กับฉันโดยใช้ Angular 2 รุ่นล่าสุด (2.0.0-rc.1):

main.ts

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

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

นี่คือการอ้างอิงฟังก์ชั่นจากเอกสารของพวกเขา: https://angular.io/api/core/enableProdMode


1
ลิงค์ใหม่: angular.io/docs/ts/latest/api/core/index/…
emp

1
@emp ฉันประหลาดใจที่เอกสารทางการของ Angular enableProdModeไม่ได้บอกคุณว่าคุณควรจะโทรหาที่ไหน
ได

55

เมื่อฉันสร้างโครงการใหม่โดยใช้ angi-cli ไฟล์ถูกรวมเรียกว่า environment.ts ภายในไฟล์นี้เป็นตัวแปรอย่างนั้น

export const environment = {
  production: true
};

จากนั้นใน main.ts คุณมีสิ่งนี้

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);

คุณสามารถเพิ่มสิ่งนี้เข้ากับโครงการที่ไม่ใช่ angular-cli ฉันจะถือว่าเนื่องจาก enableProdMode () กำลังนำเข้าจาก @ angular / core


สิ่งนี้ทำงานกับบิลด์ที่ไม่ได้ผลิตหรือไม่ ฉันสมมติว่าในกรณี environment.ts จะถูกละเว้นดังนั้นคุณไม่ได้รับข้อผิดพลาดในการรวบรวม tsc เมื่อพยายามนำเข้าโมดูล?
llasarov

@llasarov the environment.ts ทำงานเหมือนไฟล์กำหนดค่าซึ่งคุณสามารถเปิด / ปิดโหมดการผลิตได้ main.ts เพียงเรียกใช้ enableProdMode หากเป็นจริงดังนั้นสิ่งนี้สามารถทำได้โดยไม่ต้องมีกระบวนการสร้างเฉพาะ นอกจากนี้คุณยังสามารถเลือกการบันทึกที่นี่โดยตรวจสอบว่า logMode ตรวจแก้จุดบกพร่องแล้วบริการตัวบันทึกที่กำหนดเองของคุณกำลังทำรายละเอียด StackTrace อย่างอื่นเพียงบันทึกหนึ่งซับ
NitinSingh

13

ไปที่src/enviroments/enviroments.tsและเปิดใช้งานโหมดการผลิต

export const environment = {
  production: true
};

สำหรับเชิงมุม 2


10

เพื่อเปิดใช้งานโหมดการผลิตในเชิงมุม 6.XX เพียงแค่ไปที่ไฟล์สภาพแวดล้อม

ชอบเส้นทางนี้

เส้นทางของคุณ: project>\src\environments\environment.ts

เปลี่ยนproduction: falseจาก:

export const environment = {
  production: false
};

ถึง

export const environment = {
  production: true
};

ป้อนคำอธิบายรูปภาพที่นี่


8

โหมด prod เวลาส่วนใหญ่ไม่จำเป็นในระหว่างการพัฒนา ดังนั้นวิธีแก้ปัญหาของเราคือเปิดใช้งานเมื่อไม่ใช่ localhost เท่านั้น

ในเบราว์เซอร์ของคุณ ' main.tsที่คุณกำหนด AppModule รูทของคุณ:

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

isLocalนอกจากนี้ยังสามารถใช้เพื่อวัตถุประสงค์อื่น ๆ เช่นenableTracingสำหรับRouterModuleสำหรับการแก้จุดบกพร่องที่ดีกว่าสแต็คร่องรอยระหว่างขั้นตอนการพัฒนา


6

เมื่อคำสั่ง ng build ถูกใช้มันจะเขียนทับไฟล์ environment.ts

โดยค่าเริ่มต้นเมื่อใช้คำสั่ง ng build จะตั้งค่าสภาพแวดล้อม dev

ในการใช้สภาพแวดล้อมการผลิตให้ใช้คำสั่ง ng build --env = prod

สิ่งนี้จะเปิดใช้งานโหมดการผลิตและอัปเดตไฟล์ environment.ts โดยอัตโนมัติ


1
สิ่งนี้ถูกเปลี่ยนใน Angular CLI 6 เป็นng build --configuration=production(โดยค่าเริ่มต้นโดยใช้ไฟล์ angular.json ที่สร้างโดย CLI)
slasky


4

สำหรับผู้ที่ทำพา ธ การอัพเกรดโดยไม่เปลี่ยนไปใช้ TypeScript:

ng.core.enableProdMode()

สำหรับฉัน (ใน javascript) ดูเหมือนว่า:

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

4

คุณไม่ต้องการสภาพแวดล้อมใด ๆ หรือไฟล์ดังกล่าวที่จะให้โครงการเมล็ดพันธุ์ของคุณ เพียงแค่มี configuration.ts และเพิ่มรายการดังกล่าวทั้งหมดซึ่งต้องการการตัดสินใจรันไทม์ (ตัวอย่าง: - การกำหนดค่าการบันทึกและ URL) สิ่งนี้จะพอดีกับโครงสร้างการออกแบบใด ๆ และยังช่วยในอนาคต

configuration.ts

export class Configuration {

   isInProductionMode : bool = true;

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

// ตอนนี้ใช้ในรหัสเริ่มต้นของคุณ (main.ts หรือเทียบเท่าตามการออกแบบโครงการเมล็ดพันธุ์

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

1
คุณจะแยกความแตกต่างของผลิตภัณฑ์ / dev กับที่isInProductionModeเป็นจริง / เท็จได้อย่างไร ในเวลาที่สร้าง?
LeOn - Han Li

โดยปกติจะเป็นพารามิเตอร์
GULP

JSON มีรายการดังต่อไปนี้: - "environmentSource": "environment / environment.ts", "environment": {"dev": "environment / environment.ts", "prod": "environment / environment.prod.ts" }
NitinSingh



0

My Angular 2 project ไม่มีไฟล์ "main.ts" ที่กล่าวถึงคำตอบอื่น ๆ แต่มีไฟล์ " boot.ts " ซึ่งดูเหมือนจะเกี่ยวกับสิ่งเดียวกัน (ความแตกต่างอาจเกิดจาก Angular รุ่นต่างๆ)

การเพิ่มสองบรรทัดหลังimportคำสั่งสุดท้ายใน "boot.ts" ได้ผลสำหรับฉัน:

import { enableProdMode } from "@angular/core";
enableProdMode();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.