我正在尝试确定在angular2中调用bootstrap
的最佳方法,而不必在每个环境中注释掉/。我知道它需要在?devmode
之前调用,但是我想以一种方式执行此操作,我可以使用GET
之类的URL参数打开开发模式,这样我就可以在devmode中运行以进行开发,然后在生产中我将看到没有enableProdMode()
参数存在并调用enableProdMode()
。
问题是我无法使用任何angular2代码在引导之前提取URL参数...
有没有人对如何调用URLClassLoader
(在bootstrap之前或其他之前)提出任何建议,这样你就不会在代码行中注释用于测试和交付代码?
答案 0 :(得分:1)
无论如何,初始化都依赖于平台
if (window.location.href.indexOf('devmode') < 0) {
enableProdMode();
}
没有伤害。
答案 1 :(得分:1)
我最终做的事情(根据Gunter的回答)是定义一个“全局”服务,我可以根据href查询我是否处于devmode状态。
main.ts
let developmentMode: boolean = true;
if (window.location.href.indexOf('devmode') < 0) {
// devmode not found in the URL ... we are in prod mode
developmentMode = false;
enableProdMode();
}
bootstrap(HomeComponent, [
HTTP_PROVIDERS,
ROUTER_PROVIDERS,
// initialize our global class singleton and set development mode
provide(Global, {
useFactory: () => {
let global: Global = new Global();
if (developmentMode) {
global.enableDevelopmentMode();
}
return global;
}
}),
provide(Window, { useValue: window }),
provide(APP_BASE_HREF, { useValue: '/' })
]);
global.ts
import {Injectable} from 'angular2/core';
@Injectable()
export class Global {
private devMode: boolean = false;
constructor() {
}
isDevelopmentMode() {
return this.devMode;
}
enableDevelopmentMode() {
this.devMode = true;
}
}
我的解决方案感觉有些倒退,因为我觉得我正在考虑'双重否定'逻辑,但它只适用于引导程序,如果他们关心,应用程序内部的每个人都可以简单地调用Global.isDevelopmentMode()
。 / p>
答案 2 :(得分:0)
注意:已有内置函数来确定是否已启用生产模式:
import { isDevMode } from '@angular/core'
console.log('Development mode: ' + isDevMode());
注意:在调用enableProdMode()
之前绝不能调用它。
是的我知道这不是一个直接的答案,但一旦你确定了启用它的位置,这可能很有用。