ดูเหมือนจะง่าย แต่ฉันไม่พบวิธีแก้ปัญหาใด ๆ
ดังนั้นฉันจะตรวจสอบได้อย่างไรว่าแอปของฉันกำลังทำงานในโหมดการผลิตหรือโหมดการพัฒนา
ดูเหมือนจะง่าย แต่ฉันไม่พบวิธีแก้ปัญหาใด ๆ
ดังนั้นฉันจะตรวจสอบได้อย่างไรว่าแอปของฉันกำลังทำงานในโหมดการผลิตหรือโหมดการพัฒนา
คำตอบ:
คุณสามารถใช้ฟังก์ชันนี้isDevMode
import { isDevMode } from '@angular/core';
...
export class AppComponent {
constructor() {
console.log(isDevMode());
}
}
ข้อควรทราบ : ระวังด้วยฟังก์ชั่นนี้
if(isDevMode()) {
enableProdMode();
}
คุณจะได้รับ
ข้อผิดพลาด: ไม่สามารถเปิดใช้งานโหมด prod หลังจากการตั้งค่าแพลตฟอร์ม
ตัวแปรสภาพแวดล้อม
import { environment } from 'src/environments/environment';
if (environment.production) {
//
}
ฉีดโดยกระบวนการ webpack ตัวแปร env.NODE_ENV
declare let process: any;
const env = process.env.NODE_ENV;
if (env === 'production') {
//
}
platformBrowserDynamic().bootstrapModule(AppModule);
ตามคู่มือการปรับใช้เชิงมุมที่https://angular.io/guide/deployment#enable-production-mode :
การสร้างสำหรับการผลิต (หรือต่อท้ายแฟล็ก --environment = prod) เปิดใช้งานโหมดการผลิตดูที่ CLI สร้างขึ้น
main.ts
เพื่อดูวิธีการทำงาน
main.ts
มีดังต่อไปนี้:
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
ดังนั้นตรวจสอบenvironment.production
ดูว่าคุณอยู่ระหว่างการผลิตหรือไม่
isDevMode()
ส่วนใหญ่มีแนวโน้มที่คุณไม่ต้องการที่จะเรียกร้อง ตามเอกสาร Angular API ที่https://angular.io/api/core/isDevMode :
หลังจากเรียกครั้งเดียวค่าจะถูกล็อคและจะไม่เปลี่ยนแปลงอีกต่อไป ... โดยค่าเริ่มต้นจะเป็นจริงเว้นแต่ผู้ใช้จะเรียก enableProdMode ก่อนที่จะเรียกสิ่งนี้
ฉันพบว่าการโทรisDevMode()
จากng build --prod
บิลด์จะคืนค่าจริงเสมอและล็อกให้คุณทำงานในโหมด dev ให้ตรวจสอบenvironment.production
ดูว่าคุณอยู่ระหว่างการผลิตหรือไม่ จากนั้นคุณจะอยู่ในโหมดการผลิต
isDevMode()
เป็นวิธีที่ดีอย่างยิ่งในการทำให้สำเร็จ ที่.
หากคุณต้องการทราบmode
Angular ตามที่ @yurzui กล่าวคุณต้องโทร{ isDevMode } from @angular/core
แต่จะกลับมาได้false
ก็ต่อเมื่อคุณโทรenableProdMode
ก่อน
หากคุณต้องการทราบสภาพแวดล้อมการสร้างกล่าวอีกนัยหนึ่งคือหากแอปของคุณกำลังทำงานลดขนาดหรือไม่คุณต้องตั้งค่าตัวแปรการสร้างในระบบการสร้างของคุณ ... Webpack
ตัวอย่างเช่นคุณควรดูที่definePlugin
สำหรับตัวอย่างเช่นคุณควรมีลักษณะที่
https://webpack.github.io/docs/list-of-plugins.html#defineplugin
new webpack.DefinePlugin({
ENV_PRODUCTION: !!process.env.NODE_ENV
});
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
import { enableProdMode } from '@angular/core';
import { AppModule } from './app.module'
platformBrowserDynamic().bootstrapModule(AppModule);
enableProdMode();
นี่คือรหัสของฉันดังนั้นฉันจึงได้รับข้อผิดพลาดเดียวกัน ฉันเพียงแค่สบตาบรรทัดที่ 3 และ 4 นั้นปัญหาได้รับการแก้ไข ดังนั้นก่อนที่จะบูตโมดูลเราควรเปิดใช้งานโหมด --prod
อันที่ถูกต้องสามารถใส่ได้ด้วยวิธีนี้
enableProdMode()
platformBrowserDynamic().bootstrapModule(AppModule);
คุณควรระมัดระวังให้คุณตรวจสอบค่าส่งคืนของไฟล์ isDevMode()
ฟังก์ชัน
การตั้งค่าของฉันล้มเหลวเนื่องจากฉันกำลังตรวจสอบการมีอยู่: if (isDevMode)
อยู่เสมอtrue
แม้ในการผลิตเพราะฉันประกาศด้วยimport { isDevMode } from '@angular/core';
แม้ในการผลิตเพราะผมประกาศด้วย
if (isDevMode())
ส่งคืนfalse
อย่างถูกต้อง
ng build --prod=true
angular cli
if ( isDevMode )
ตรวจสอบเฉพาะว่าตัวระบุisDevModeถูกกำหนดไม่ใช่ null และไม่ว่างหรือเป็นศูนย์ ในฐานะที่เป็นตัวบ่งชี้ที่ถูกกำหนดไว้ใน@angular/core
ที่ถ้า ()มักจะกลับจริง ตอนนี้if( isDevMode() )
จะเรียกใช้ฟังก์ชันจริงและจะกลับมาว่าเป็นสภาพแวดล้อมการพัฒนาหรือไม่
เพียงตรวจสอบตัวแปรการผลิตที่มีอยู่ในไฟล์สภาพแวดล้อมซึ่งจะเป็นจริงสำหรับโหมดการผลิตและเป็นเท็จสำหรับการพัฒนา
import { environment } from 'src/environments/environment';
if (environment.production) {
// for production
} else {
// for development
}