在angular2中调用enableProdMode的最佳模式

时间:2016-05-02 14:29:41

标签: angular

我正在尝试确定在angular2中调用bootstrap的最佳方法,而不必在每个环境中注释掉/。我知道它需要在?devmode之前调用,但是我想以一种方式执行此操作,我可以使用GET之类的URL参数打开开发模式,这样我就可以在devmode中运行以进行开发,然后在生产中我将看到没有enableProdMode()参数存在并调用enableProdMode()

问题是我无法使用任何angular2代码在引导之前提取URL参数...

有没有人对如何调用URLClassLoader(在bootstrap之前或其他之前)提出任何建议,这样你就不会在代码行中注释用于测试和交付代码?

3 个答案:

答案 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()之前绝不能调用它。

是的我知道这不是一个直接的答案,但一旦你确定了启用它的位置,这可能很有用。