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!
=====================
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: (
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.
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:
Ich führe die Kompilierungsphase mit dem Befehl: tsc -w
.
Hoffe es hilft dir, Thierry
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.
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
Tags und Links angular typescript systemjs