Ich habe eine SPA-Anwendung in Visual Studio, die in TypeScript (2.0) geschrieben ist und Aurelia verwendet. Aber meine Probleme sind nicht spezifisch für Aurelia oder VS.Verweisen/Importieren von Klassen aus Typings/anderen Projekten
Jetzt möchte ich Plugins für diese Anwendung in einem anderen Projekt schreiben. Diese Plugins müssen Klassen/Module aus der Hauptanwendung beziehen/importieren.
Dies funktioniert grundsätzlich, aber das Plugin-Projekt weiß nicht über die Klassen/Module aus der Hauptanwendung. Deshalb, obwohl Dinge kompilieren und korrekt laufen (dank JavaScript), beschwert sich die IDE (Visual Studio, VS Code oder der NPM-Typskript-Compiler) Kann Modul 'abc' auf keinem Import finden. Dies bedeutet auch, dass für diese Klassen keine Intellisense- oder Auto-Vervollständigen-Unterstützung vorhanden ist.
Ich habe keine Deklarationen (*.d.ts
) im Hauptprojekt erstellt und eine Build-Aufgabe erstellt, um diese in das Plugin-Projekt zu kopieren. Aber sie werden immer noch nicht erkannt. Wie kann ich das Plugin-Projekt erkennen, dass diese Klassen aus Deklarationsdateien stammen?
Die Haupt-App hat eine Klasse wie core/events.ts. Seine DTS könnte wie folgt aussehen:
export declare class Events {
static MY_CONSTANT: string;
}
Das Plugin-Projekt hat ein Plugin hier: Plugins/PluginA/Plugin-panel.ts. Es mag Events
von Kern/events.ts importieren:
import { Events as e1 } from 'core/events';
import { Events as e2 } from 'typings/core/events';
Die erste Zeile (e1) ist wie ich Events
im Hauptprojekt importieren würde und es tatsächlich funktioniert, wenn die kompilierte JavaScript-Datei gelöscht wird in die Anwendung. Aber der Compiler beklagt sich darüber (semantischer Fehler).
Die zweite Zeile (e2) hat keine Compiler-Warnung, ist aber in Laufzeit falsch.
Die Typisierungen wurden Plugins/Typisierungen kopiert/, hier Plugins/Typisierungen/core/events.d.ts. Nur der Ordner Plugins enthält TypeScript-Dateien, der Rest des Projekts ist C#. Es gibt ein tsconfig.json im Stammordner, die von Interesse sein werden, ich denke:
{
"version": "2.0.0",
"compileOnSave": false,
"compilerOptions": {
"rootDir": "./",
"sourceMap": true,
"target": "es6",
"module": "amd",
"declaration": false,
"noImplicitAny": false,
"noResolve": true,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true
},
"filesGlob": [
"./Plugins/**/*.ts",
"./Plugins/typings/**/*.d.ts"
],
"exclude": [
"node_modules"
],
"atom": {
"rewriteTsconfig": false
}
}
Ich habe bereits versucht rootDir
zu ./Plugins zu setzen, aber das hat auch nicht geholfen.
Wie kann ich das Projekt so einrichten, dass die Import-Anweisung in der Plugin-Entwicklung gleich funktioniert und in der Anwendung bereitgestellt wird?
Hinweis: Wenn ich eine Zuordnung für den Import in die Hauptanwendung Loader-Konfiguration hinzuzufügen (die config.js
für SystemJS
ist ich hier verwende, sieht die Zeile wie folgt: "typings/core/events": "core/events",
), der Hauptanwendung kann mit den verschiedenen Importpfad arbeiten . Aber das würde bedeuten, dass ich für jede Typoskript-Datei im Hauptprojekt ein Mapping einrichten müsste.