2016-07-10 4 views
2

Ich habe eine Web-App geschrieben, die einfach aus zwei verschiedenen Projekten besteht, die sich jeweils in verschiedenen Ordnern und ihren eigenen einzigartigen Dateien befinden.Wie richte ich eine Typescript-Klasse ein, damit meine Browser- und Knoten-App sie verwenden kann?

Der Client Teil wird in Angular 2 (RC-4) mit SystemJS Typescript 1.8.10 (wie here) geschrieben. Der Server Teil ist eine einfache NodeJS-App, die auch Typescript 1.8.10 verwendet.

Da jeder seine eigenen Ordner und ihre eigenen Dateien (einschließlich ihrer eigenen tsconfig.json-Datei.) Erwähnt hat

Alle funktionieren gut.

Aber jetzt möchte ich eine Klasse MySharedClass {} in beiden dieser Projekte verwendet werden. Wie um alles in der Welt mache ich das?

Sicher, ich kann eine Source-Code-Kopie in jedem der Projekte (d. H. 2 Kopien der Quelldatei), und es baut und läuft gut - aber das ist NICHT, wie wir Dinge tun.

Ich dachte an ein ‚drittes‘ Projekt erstellen ‚gemeinsamen‘ genannt und MySharedClass {} dort setzen, aber ich kann ein

import {MyClass} from "../../../common/my-class";

in jedem meiner Projekten nicht tun, weil es nicht scheint um es zu beziehen, wenn ich es führe. (Ich konnte es nicht bekommen, um die Datei während der Laufzeit zu referenzieren, da ich glaube, der Grund ist, dass Sie die Datei nicht außerhalb des Projektbereichs referenzieren können?!?)

Forschen um, tut es scheint keine Erklärung dafür zu sein - vermisse ich etwas Offensichtliches?

Bitte zögern Sie nicht, mir in die richtige Richtung zu zeigen, was die Leute tun, um dies zu lösen - muss ich etwas lernen? Ich bin mir ziemlich sicher, dass ich das ES6-Modulsystem (gemäß dem jüngsten Typescript ES6-Weg) verstehe, da ich diese Methode in den Projekten verwendet habe. Ich verwende momentan kein Build-Tool, da ich keine zusätzliche Komplexität benötige: Ich verwende nur Skripte, die in der package.json-Datei enthalten sind (gemäß here). Sollte ich jetzt mit Gulp suchen müssen?

+0

"Es ist vollkommen in Ordnung, ein drittes Projekt namens 'common' zu erstellen und MySharedClass {} dort hineinzusetzen". Wo stellst du den Pfad der kompilierten js ein? – Zen

+0

@Zen ist richtig. Es ist höchstwahrscheinlich ein Problem des Include-Pfades. Sie können auch den gesamten Code in einem dedizierten Paket verschieben, das in beiden Projekten als node_modules installiert ist. – jobou

+0

@jobou Nicht sicher. Wenn OP Visual Studio verwendet, wird die Client-Anwendung von IIS auf localhost gehostet und somit kann auf nichts außerhalb des Projektstamms verwiesen werden. –

Antwort

0

Danke. Ja @Zen ist ein Problem des Include-Pfades. Ich benutze nicht Visual Studio und benutze Node als Webserver (Ich habe Atom verwendet, aber es hängt so seine Rückseite an Notepad++ ich gehe ...). Ja @jobou du hast recht damit, dass die üblichen Abhängigkeiten außerhalb des Ordners liegen und somit vom Webserver nicht gewartet werden können. Ich habe mein Problem gelöst, indem ich (wie @Zen sagt) ein drittes Projekt mit dem Namen 'common' erstellt habe. Wenn ich jedes andere Projekt erstelle, führe ich einfach ein einfaches Skript aus, das die notwendigen Dateien in die entsprechenden Ordner kopiert andere Projekte können die Klasse verwenden.

Verwandte Themen