को हटाते हुए पेड़ हिलाते हुए मुझे लगता है कि Angular-cli tree-shaking exclude component from removal पर सवाल बहुत समान है लेकिन मुझे इससे कुछ भी नहीं मिल रहा है।एंगुलर 2 (सीएलआई) वृक्ष गतिशील रूप से बनाए गए NgModule
अनिवार्य रूप से मेरे पास How can I use/create dynamic template to compile dynamic Component with Angular 2.0? में वर्णित एक गतिशील घटक कारखाना है।
जब मैं इसे गैर-उत्पादन सेटिंग के साथ नवीनतम कोणीय सीएलआई का उपयोग करके बनाता हूं, तो यह सब ठीक काम करता है।
@Injectable()
export class DynamicTypeBuilder {
constructor() {
}
private _cacheOfFactories: {[templateKey: string]: ComponentFactory<any>} = {};
private compiler: Compiler = new JitCompilerFactory([{useDebug: false, useJit: true}]).createCompiler();
public createComponentFactory<COMPONENT_TYPE>(type: any, template: string, additionalModules: any[] = []): Observable<ComponentFactory<COMPONENT_TYPE>> {
let factory = this._cacheOfFactories[template];
if (factory) {
return Observable.of(factory);
}
// unknown template ... let's create a Type for it
let module = this.createComponentModule(type, additionalModules);
// compiles and adds the created factory to the cache
return Observable.of(this.compiler.compileModuleAndAllComponentsSync(module))
.map((moduleWithFactories: ModuleWithComponentFactories<COMPONENT_TYPE>) => {
factory = moduleWithFactories.componentFactories.find(value => value.componentType == type);
this._cacheOfFactories[template] = factory;
return factory;
});
}
protected createComponentModule(componentType: any, additionalModules: any[]): Type<any> {
@NgModule({
imports: [
FormsModule,
ReactiveFormsModule,
BrowserModule,
PipesModule,
...additionalModules
],
declarations: [
componentType
],
schemas:[CUSTOM_ELEMENTS_SCHEMA]
})
class RuntimeComponentModule {
}
return RuntimeComponentModule;
}
}
:
EXCEPTION: No NgModule metadata found for 'e'.
ORIGINAL STACKTRACE:
main.dc05ae9….bundle.js:formatted:4731
Error: No NgModule metadata found for 'e'.
at f (vendor.c18e6df….bundle.js:formatted:76051)
at t.resolve (vendor.c18e6df….bundle.js:formatted:20624)
at t.getNgModuleMetadata (vendor.c18e6df….bundle.js:formatted:20169)
at t._loadModules (vendor.c18e6df….bundle.js:formatted:40474)
at t._compileModuleAndAllComponents (vendor.c18e6df….bundle.js:formatted:40462)
at t.compileModuleAndAllComponentsSync (vendor.c18e6df….bundle.js:formatted:40436)
at e.createComponentFactory (main.dc05ae9….bundle.js:formatted:4789)
यहाँ मेरी घटक कारखाने वर्ग है: हालांकि, एक बार मैं उत्पादन सेटिंग का उपयोग मैं ब्राउज़र में निम्न त्रुटि का पता लगाने के तुरंत जब एक पृष्ठ है कि गतिशील सामग्री पैदा कर दी है लोड करने की कोशिश मिल
जो
var _ = function() {
function e() {
this._cacheOfFactories = {},
this.compiler = new i.a([{
useDebug: !1,
useJit: !0
}]).createCompiler()
}
return e.prototype.createComponentFactory = function(e, t, n) {
var i = this;
var _ = this._cacheOfFactories[t];
if (_)
r.Observable.of(_);
var a = this.createComponentModule(e, n);
return r.Observable.of(this.compiler.compileModuleAndAllComponentsSync(a)).map(function(n) {
return _ = n.componentFactories.find(function(t) {
return t.componentType == e
}),
i._cacheOfFactories[t] = _,
_
})
}
,
e.prototype.createComponentModule = function(e, t) {
var n = function() {
function e() {}
return e
}();
return n
}
,
e.ctorParameters = function() {
return []
}
,
e
}()
त्रुटि संदेश में 'ई' के लिए transpiled की जा रही है createComponentModule
whi से समारोह e()
है ch, जैसा कि आप देख सकते हैं, खाली है, भले ही @NgModule
सामग्री होनी चाहिए।
मैं गतिशील रूप से एक नया NgModule कैसे बना सकता हूं और अभी भी कोणीय सीएलआई के उत्पादन मोड का उपयोग कर सकता हूं?
संस्करण:
Angular2: 2.4.8
कोणीय CLI: 1.0.0-beta.32.3
टाइपप्रति: 2.1.6
मुझे डर है कि यह ठीक से काम नहीं करता है। कोड ठीक संकलित करता है और पारदर्शी जेएस में शामिल है, हालांकि, अब एक नई समस्या है। कोणीय को नए 'NgModule' में कोई कस्टम आयातित मॉड्यूल नहीं मिल रहा है। तो उपरोक्त उदाहरण में 'फॉर्म मॉड्यूल', 'प्रतिक्रियाशीलफॉर्म मॉड्यूल' और 'ब्राउज़र मॉड्यूल' पाया जा सकता है, हालांकि 'पाइप्स मॉड्यूल' नहीं हो सकता है। त्रुटि 'CompileMetadataResolver.getNgModuleMetadata' में है। – Sebastian
वास्तव में मुझे एक ही समस्या है। ऐसा लगता है कि जेआईटी संकलन सजावट को संकलित नहीं कर रहा है। न केवल 'रनटाइम कॉम्पोनेंट मॉड्यूल'। यदि आप संकलित 'main.js' को पढ़ते हैं तो इसमें' PipesModule' के लिए मेटाडेटा नहीं होता है। मैं इस टीएमआर पर जारी रखूंगा। मुझे कोणीय मॉड्यूल बताए जाने के लिए Thx ठीक है। –
यह एक बार में jit + aot काम कर रहा है। V4 में –