Eine benutzerdefinierte Komponente - Angular2 und TypeScript - kann nicht importiert werden

8

Ich versuche eine benutzerdefinierte Komponente in meiner app.ts zu importieren, bekomme aber den Fehler " TS2307: Kann das Modul 'MyComponent' nicht finden" "Ich habe es mir angesehen, konnte es nicht finden alles, was mir helfen würde.

Einige Leute haben geschrieben: benutze "moduleResolution": "classic" , aber wenn ich das tue, bekomme ich den TS2307-Fehler für alles andere (alle angular2 / ...) außer MyComponent.

Andere haben "run tsc --declaration MyComponent.ts" geschrieben - was eine MyComponent.d.ts-Datei erzeugt (während Fehler in der Konsole geworfen werden, wie "Kann nicht kompiliert werden, wenn nicht das Flag --module angegeben ist" - was IST) in tsconfig als Option zur Verfügung gestellt - oder "Kann das Modul 'angular2 / common' nicht finden für was auch immer ich in MyComponent.ts importieren - aber es erzeugt eine .d.ts-Datei), aber beim Versuch, app.ts zu kompilieren es noch gibt den gleichen TS2307-Fehler. Nohting habe ich gefunden, funktioniert.

Dies ist meine Projektstruktur:

%Vor%

Dies ist meine tsconfig.json :

%Vor%

Meine app.ts :

%Vor%

Und hier ist meine MyComponent.ts :

%Vor%

Meine app.ts und MeineKomponente.ts befinden sich beide im selben Ordner. Wie auch immer, ich habe den Pfad auch so ausprobiert: importiere {MyComponent} von "/ app / resources / dev / ts / MyComponent". Außerdem habe ich versucht, es zum Dateiarray in tsconfig hinzuzufügen (einige Leute haben geschrieben, dass ich das tun sollte) ... Immer noch ... Nichts hat funktioniert! Ich habe auch die Ausgabe von js überprüft, weil einige Leute geschrieben haben, dass, obwohl es den Fehler wirft, es trotzdem kompiliert werden könnte ... Kein Glück!

=====================

BEARBEITEN:

Ok, wie inoabrian im ersten Kommentar sagt ... Ich dachte, ich hätte alles versucht, aber es scheint, ich habe "./MyComponent" nicht für den Import-Teil ausprobiert.

%Vor%

Jetzt erledigt der Transcompiler seine Aufgabe. Danke Inoabrian, aber jetzt habe ich ein anderes Problem. Wenn ich versuche, im Browser zu laufen, überprüfe ich meine Konsole und schreibe sowohl systemjs als auch angular2-pollyfills:

%Vor%

bzw.

%Vor%

Lassen Sie sich nicht vom Pfad abweisen (wenn ich mit meiner Projektordner-Struktur vergleiche), mein lokaler Server zeigt auf / app, wenn ich auf Ссылка

Dies ist mein index.html mit der Systemkonfiguration und allen enthaltenen js-Dateien:

%Vor%

Ich habe das Gefühl, dass ich noch eine Sache mit der transcompilierten Datei "MyComponent.js" machen sollte, aber ich weiß nicht, was ich versucht habe, es zu System.import hinzuzufügen, in der Hoffnung, dass es ein Array akzeptieren würde. .. aber es scheint, dass es nicht). Was soll ich als nächstes tun?

PS Das ist enttäuschend, ich hatte gehofft, dass das Importieren von MyComponent in app.ts alles wäre und dass ich die MyComponent-Klasse + alles aus MyComponent.ts + meiner transcompilierten app.ts-Datei finden würde ALL IN ONE app.js Datei, nicht noch eine andere js Datei: (

    
MrCroft 19.01.2016, 14:03
quelle

4 Antworten

8
Ich weiß, dass es längst überfällig ist, aber vielleicht könnten andere von einer Antwort profitieren. Ich erkannte, was das letzte Problem war (abgesehen von dem, was ich bereits in der ursprünglichen Frage bearbeitet habe). Hier ist es: Ich erwähnte, dass ich eine benutzerdefinierte Ordnerstruktur hatte und nicht bereit war, sie zu ändern. Wenn ich es getan hätte, hätte es funktioniert, indem ich einfach dem eckigen Schnellstart folgte. Aber ich hätte das Problem in meinem speziellen Fall nicht erkannt und ich hätte nicht verstanden, wie System.js funktioniert.

Das Problem war in meinem System.config () - im Abschnitt Pakete. Das ist der schlechte Code:

%Vor%

Mein Fehler war, dass der Schlüssel "app" einfach ein generischer Schlüssel ist, der aus dem Wort "application" kommt. Es stellt sich heraus, dass in dem Paketobjekt jeder Schlüssel tatsächlich einen Pfad darstellt (wo sich dieses Paket - es sind Dateien - in Ihrer Anwendung befinden). Angenommen, der Ordner, in dem sich meine übertragenen Dateien befinden, wäre "meine / app / public" und "app_main_file" ist die Haupt-js-Datei meiner Anwendung, dann hätte ich eigentlich so etwas:

%Vor%

Oder Sie können den Konfigurationsbereich noch netter schreiben, wie folgt:

%Vor%

Ich denke, es ist ziemlich selbsterklärend, was "map" macht und wie man es benutzt.

P.S. Ich weiß, dass ich in meiner Antwort nicht genau die gleiche Ordnerstruktur wie in der ursprünglichen Frage verfolgt habe, aber ich denke, es macht mehr Sinn, es so zu erklären. Wenn es darauf ankommt, ersetzen Sie "my / app / public" durch das, was ich ursprünglich in der Frage "resources / dist / js /" hatte, und es ist dasselbe.

    
MrCroft 30.04.2016, 20:58
quelle
1

Ich glaube, Sie vermissen den richtigen Parameter in der Systemkonfiguration. füge es so hinzu:

%Vor%     
eesdil 23.01.2016 20:06
quelle
0

Was ein bisschen merkwürdig ist, ist, dass Sie kein MyComponent.js im gleichen Ordner als app.js haben. In meinem Fall, wenn ich das outDir in der Datei tsconfig.json hinzufüge, werden alle meine TypeScript-Dateien in diesem Ordner in JavaScript kompiliert.

Hier ist meine Konfiguration in meiner tsconfig.json Datei:

%Vor%

Ich führe die Kompilierungsphase mit dem Befehl: tsc -w .

durch

Hoffe es hilft dir, Thierry

    
Thierry Templier 19.01.2016 14:28
quelle
-4

Fügen Sie Ihrem Modulimport eine .js Erweiterung hinzu. Dies wird höchstwahrscheinlich den IDE-Fehler werfen. Aber wenn Sie es aktualisieren, funktioniert es. Diesem Problem habe ich mich auch gestellt. Es hat gestern bei der Arbeit geklappt und heute habe ich ein anderes Beispiel ausprobiert, das 404 Fehler geben würde.

%Vor%

Eine andere Lösung, die für mich funktioniert hat ist: Ich hatte alle .ts Dateien im Stammordner. Ich habe eine andere Unterordner-App erstellt und sie dorthin verschoben. Von da an konnte ich auf sie ohne die Erweiterung verweisen. Nicht sicher, warum es im Stammordner nicht funktioniert hat. Aber sie in einen anderen Ordner zu verschieben, machte den Trick. Hoffe es hilft

    
Pankaj Dekate 30.04.2016 17:30
quelle

Tags und Links