2017-12-28 10 views
2

Meine Vision ist, irgendwo in den Linien von:Importieren einer Liste von Modulen in Angular?

const usedModules = [MatIconModule, MatInputModule, ...]; 

for(let i=0; i<usedModules.length; i++) { 
    import { usedModules[i] } from '@angular/material'; 
} 
@NgModule({ 
    imports: usedModules, 
    exports: usedModules, 
}) 
export class AppMaterilaModule {} 

Offensichtlich ist dies nicht funktioniert. Hat jemand irgendwelche Ideen, wie man eine dynamische Importanweisung erstellt, die die usedModules nur einmal aufführt?

+0

Wie viele Module haben Sie (!), Die dies berücksichtigen würden? Wenn die Module so ähnlich sind, ist es wahrscheinlicher, dass ein Redesign für sie in Betracht gezogen wird. –

+4

Sie können nicht. Module werden statisch importiert, damit der Bundler (typischerweise WebPack) weiß, was in Ihrer Anwendung tatsächlich verwendet wird. –

Antwort

1

Sie können Module mit SystemJS dynamisch laden. Es wird aussehen wie:

const plugins = [ 
    './plugin1.js', 
    './plugin2.js' 
]; 

const loadPlugins = (plugins) => { 
    return plugins.map((path) => window.SystemJS.import(path)); 
}; 

Promise.all(loadPlugins(plugins)).then(() => { 
    // Everything is ready now 
}); 

Ich hoffe, ich verstehe die Frage richtig.

0

Module werden zum Bootstrapping der Anwendung verwendet, so dass zu diesem Zeitpunkt nicht entschieden werden kann, was verwendet wird. Die einzige Möglichkeit, die Sie haben (die in diese Richtung geht), besteht darin, kleine Module mit nur notwendigen Abhängigkeiten zu erstellen und dann Lazy Loading zu verwenden, also nur die Abhängigkeiten zu laden, wenn eine bestimmte Route aufgerufen wird. Dies führt jedoch zu mehr Zeit beim Laden der Seite anstatt beim Laden der Anwendung. Und es funktioniert nicht mit AOT kompilieren.

Verwandte Themen