angular4 / 5:是否可以在角度cli中有条件地构建模块?

时间:2018-02-01 08:50:50

标签: angular angular-cli

我有2个独立的应用程序部分,使用共同的主题(截至目前)。 所以我尝试将它们放在同一个应用程序中,但是在两个不同的模块中:AppModuleSecondModule

现在,我在环境文件中创建了一个变量buildModule,并创建了一个environment.second.ts文件,其值为此变量(所有其他环境文件具有此变量的不同值,如第一个,第三个等):

export const environment = {
    production: true,    
    LANGUAGE: 'en',
    envName: 'second',
    buildModule: 'second'
  };

以及angular-cli.json

中的条目
"environments": {
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts",        
        "second": "environments/environment.second.ts"
      }

main.ts中,我正在尝试对模块进行条件自举:

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

let buildModule: string = environment.buildModule;
if(buildModule === 'second'){
  platformBrowserDynamic().bootstrapModule(SecondModule)
    .catch(err => console.log(err));
} 
else{
  platformBrowserDynamic().bootstrapModule(AppModule)
    .catch(err => console.log(err));
} 

但是我收到了错误:

ERROR in Error: Tried to find bootstrap code, but could not. Specify either statically analyzable bootstrap code or pass in an entryModule to the plugins options.
    at Object.resolveEntryModuleFromMain (C:\Others\Project\Src\webapp\multiple\node_modules\@ngtools\webpack\src\entry_resolver.js:121:15)
    at Promise.resolve.then.then (C:\Others\Project\Src\webapp\multiple\node_modules\@ngtools\webpack\src\angular_compiler_plugin.js:240:54)
    at <anonymous>

我遇到了这个错误: https://github.com/angular/angular-cli/issues/3540

在角度5中是否有另一种独立引导/构建模块的方法?

1 个答案:

答案 0 :(得分:3)

我甚至不知道从哪里开始。当然你可以发明一些奇怪的东西,但想法是

  1. environment.*.ts文件被视为用于CI目的。这意味着例如你有本地,舞台和现场环境,根据那些你可以配置不同的服务器等等。
  2. 模块使用webpack构建(因为angular-cli在内部使用它)。所以,如果你想有条件地构建一些东西,你应该看看如何使用webpack,例如here
  3. 但是,您的特定问题可以通过各种方式解决。你能做什么:

    1. 延迟加载模块,请参阅示例here。如果您拥有依赖于路由器的模块
    2. ,这将非常有用
    3. 创建2个应用,请参阅the docs。当你有很大的差异时,这很好,比如一个应用程序是用户应用程序而另一个是管理员应用程序;两者都会重复使用相同的代码库,但会生成2个不同的应用程序。
    4. 最后但并非最不重要的是:您所谈论的模块是否值得付出努力?通常另一个模块意味着高达1-10KB,并且使得条件构建+稍后维护它们的努力可能远高于你获得的利润。