Ich arbeite an meinem ersten NPM-Modul. Ich habe vorher kurz mit Typoskript gearbeitet und ein großes Problem war, dass für viele Module keine Definitionsdateien verfügbar waren. Daher hielt ich es für eine gute Idee, mein Modul in Typoskript zu schreiben.
Ich kann jedoch keine Informationen darüber finden, wie dies am besten funktioniert. Ich habe diese verwandte Frage " Kann ich ein npm-Paket in Coffeescript schreiben? " Gefunden, bei der vorgeschlagen wird, nur die Javascript-Dateien zu veröffentlichen. Im Gegensatz zu den Coffeescript-Dateien können die Typoskript-Dateien jedoch nützlich sein, wenn sie in einer Typoskript-Anwendung verwendet werden.
Sollte ich beim Veröffentlichen eines NPM-Moduls Typescript-Dateien einschließen oder sollte ich nur die Javascript-Dateien veröffentlichen und die generierten .d.ts-Dateien für DefinitelyTyped bereitstellen?
quelle
Antworten:
Hier ist ein Beispielknotenmodul, das in TypeScript geschrieben wurde: https://github.com/basarat/ts-npm-module
Hier ist ein Beispiel für ein TypeScript-Projekt, das dieses Beispielmodul verwendet: https://github.com/basarat/ts-npm-module-consume
Grundsätzlich müssen Sie:
commonjs
unddeclaration:true
.d.ts
DateiUnd dann
.d.ts
.Atom-TypeScript bietet lediglich einen schönen Workflow: https://github.com/TypeStrong/atom-typescript#packagejson-support
quelle
tsconfig.json
, aber dies scheint meiner Meinung nach zu manuell zu sein.In TypeScript 3.x oder TypeScript 2.x wird in den folgenden Schritten beschrieben, was Sie tun müssen, um eine Bibliothek (npm-Paket) mit TypeScript zu erstellen:
declaration: true
zutsconfig.json
, um Tippungen zu generieren.index.ts
package.json
, weisen auf Ihre generierten Typisierungen. Wenn dies beispielsweise der FalloutDir
istdist
, fügen Sie"types": "dist/index.d.ts"
Ihrem Paket json hinzu.package.json
auf Ihre Haupteintragsdatei. Zum Beispiel , wenn IhroutDir
heißtdist
und die Haupteingangsdateiindex.js
, fügen Sie dann"main": "dist/index.js"
zu Ihrem package.json..npmignore
, um unnötige Dateien (z. B. die Quelle) zu ignorieren.npm publish
. Verwenden Sie Semver-Spezifikationen für Updates (Patch- / Bugfixnpm version patch
, nicht brechende Ergänzungennpm version minor
, brechende API-Änderungennpm version major
).Da ich eine Weile gebraucht habe, um alle veralteten Ressourcen zu diesem Thema im Internet zu durchsuchen (wie die auf dieser Seite ...), habe ich beschlossen, sie in eine Anleitung zum Schreiben einer Typoskript-Bibliothek mit einem zu packen aktuelles Arbeitsminimalbeispiel.
quelle
.npmignore
Datei, um npm zu sagen, welche Dateien beim Veröffentlichen (die.ts
Dateien) zu ignorieren sind, und a.gitignore
, um git zu sagen, welche Dateien zu ignorieren sind (dist/
)Dies ist eine neuere Antwort mit TypeScript 1.8.10:
Meine Projektstruktur ist:
Ich habe Folgendes hinzugefügt
.npmignore
, um zu vermeiden, dass überflüssige Dateien eingeschlossen werden, und das Minimum zu halten, damit das Paket importiert wird und funktioniert:Mein
.gitignore
hat:Mein
package.json
hat:Jetzt renne ich:
npm pack
Die resultierende Datei (beim Entpacken) hat die folgende Struktur:
Jetzt gehe ich zu dem Projekt, in dem ich dies als Bibliothek verwenden möchte, und tippe:
npm install ./project-1.0.0.tgz
Es wird erfolgreich installiert.
Jetzt erstelle ich eine Datei
index.ts
in meinem Projekt, in der ich gerade die npm installiert habeimport Project = require("project");
Durch das Tippen habe
Project.
ich die Intellisense-Optionen, um die es in dieser ganzen Übung ging.Ich hoffe, dies hilft jemand anderem dabei, seine TypeScript npm-Projekte als interne Bibliotheken in größeren Projekten zu verwenden.
PS: Ich glaube, dass dieser Ansatz, Projekte zu npm-Modulen zu kompilieren, die in anderen Projekten verwendet werden können, an den
.dll
in der.NET
Welt erinnert. Ich könnte mir gut vorstellen, dass Projekte in einer Lösung in VS Code organisiert werden, in der jedes Projekt ein npm-Paket erstellt, das dann in einem anderen Projekt in der Lösung als Abhängigkeit verwendet werden kann.Da ich ziemlich viel Zeit gebraucht habe, um das herauszufinden, habe ich es veröffentlicht, falls jemand hier festsitzt.
Ich habe es auch für einen geschlossenen Fehler gepostet: https://github.com/npm/npm/issues/11546
Dieses Beispiel wurde auf Github hochgeladen: vchatterji / tsc-seed
quelle
Sie sollten die ursprünglichen Typoskriptquellen anstelle der Typdefinition veröffentlichen. In
package.json
läßt die Eigenschaft Punkt ‚Typen‘ auf die * .ts - Datei.*.d.ts
Es ist gut, vorhandene JS-Bibliotheken mit Anmerkungen zu versehen, aber als Verbraucher würde ich lieber den Typoskript-Code lesen, als zwischen Typdefinitionen und heruntergestuftem, generiertem JS-Code zu wechseln.quelle
*.d.ts
ist das Einschließen der empfohlene Weg, dies zu tun, obwohl ich Ihnen die Vorteile des Einfügens von*.ts
Dateien zustimme : typescriptlang.org/docs/handbook/declaration-files/…Ich folge hauptsächlich dem Vorschlag von Varun Chatterji
Ich möchte jedoch ein vollständiges Beispiel mit Unit-Tests und Codeabdeckung zeigen und es
npm
mitjavascript
oder veröffentlichen und importierentypescript
Dieses Modul wurde mit geschrieben
typescript 2.2
und es ist wichtig, denprepublish
Hook so zu konfigurieren , dass der Code mit kompiliert wird,tsc
bevor er in npm veröffentlicht wirdhttps://github.com/sweetim/haversine-position
https://www.npmjs.com/package/haversine-position
quelle
Sie können Autodts verwenden , um das Verteilen und Verwenden von
.d.ts
Dateien von npm auch ohne Unterstützung durch die Atom-IDE zu handhaben .autodts generate
bündelt alle Ihre eigenen.d.ts
Dateien für die Veröffentlichung auf npm undautodts link
verarbeitet Verweise auf andere installierte Pakete, dienode_modules
in einem größeren Projekt, das in mehrere Unterpakete aufgeteilt ist , möglicherweise nicht immer direkt darunter liegen.Beide Befehle lesen ihre Einstellungen aus
package.json
undtsconfig.json
im Stil "Konvention über Konfiguration".Es gibt eine weitere Antwort zu Stackoverflow und einen Blog-Beitrag mit weiteren Details.
quelle
Bei Lossless haben wir ein One-Stop-TypeScript-Entwicklungstool für npm-Pakete erstellt: https://gitzone.gitlab.io/npmts/
quelle