Je travaille sur mon premier module NPM. J'ai brièvement travaillé avec dactylographié auparavant et un gros problème était que pour de nombreux modules, il n'y avait pas de fichiers de définition disponibles. J'ai donc pensé que ce serait une bonne idée d'écrire mon module en tapuscrit.
Cependant, je ne trouve aucune information sur la meilleure façon de procéder. J'ai trouvé cette question connexe " Puis-je écrire le package npm dans coffeescript? " Où les gens suggèrent de publier uniquement les fichiers javascript. Mais contrairement aux fichiers coffeescript, les fichiers dactylographiés peuvent en fait être utiles s'ils sont utilisés dans une application dactylographiée.
Dois-je inclure des fichiers Typescript lors de la publication d'un module NPM, ou dois-je publier uniquement les fichiers javascript et fournir les fichiers .d.ts générés à DefinitelyTyped?
la source
Réponses:
Voici un exemple de module Node écrit en TypeScript: https://github.com/basarat/ts-npm-module
Voici un exemple de projet TypeScript qui utilise cet exemple de module https://github.com/basarat/ts-npm-module-consume
Fondamentalement, vous devez:
commonjs
etdeclaration:true
.d.ts
fichierPuis
.d.ts
.Atom-TypeScript fournit juste un bon flux de travail autour de ceci: https://github.com/TypeStrong/atom-typescript#packagejson-support
la source
tsconfig.json
, mais cela semble trop manuel à mon avis.Avec TypeScript 3.x ou TypeScript 2.x, les étapes suivantes décrivent ce que vous devez faire pour créer une bibliothèque (package npm) avec TypeScript:
declaration: true
àtsconfig.json
pour générer des typages.index.ts
package.json
, pointez sur vos typages générés. Par exemple, sioutDir
c'est le casdist
, ajoutez"types": "dist/index.d.ts"
à votre package json.package.json
, pointez sur votre fichier d'entrée principal. Par exemple, si votreoutDir
estdist
et le fichier d'entrée principal estindex.js
, ajoutez"main": "dist/index.js"
à votre package.json..npmignore
pour ignorer les fichiers inutiles (par exemple la source).npm publish
. Utiliser les spécifications semver pour les mises à jour (correctif / correction de boguenpm version patch
, ajouts sans rupturenpm version minor
, changements de rupture d'APInpm version major
)Puisqu'il m'a fallu un certain temps pour passer au crible toutes les ressources obsolètes sur ce sujet sur Internet (comme celle de cette page ...), j'ai décidé de conclure dans comment-écrire-une-bibliothèque-typographique avec un exemple minimal de travail à jour.
la source
.npmignore
file d'indiquer à npm quels fichiers ignorer lors de la publication (les.ts
fichiers) et.gitignore
à a d'indiquer à git quels fichiers ignorer (dist/
)Voici une réponse plus récente utilisant TypeScript 1.8.10:
La structure de mon projet est:
J'ai ajouté ce qui suit
.npmignore
pour éviter d'inclure des fichiers superflus et garder le strict minimum pour que le package soit importé et fonctionne:Mon
.gitignore
a:Mon
package.json
a:Maintenant je cours:
npm pack
Le fichier résultant (une fois décompressé) a la structure suivante:
Maintenant, je vais au projet où je veux utiliser ceci comme bibliothèque et tapez:
npm install ./project-1.0.0.tgz
Il s'installe avec succès.
Maintenant je crée un fichier
index.ts
dans mon projet où je viens d'installer le npmimport Project = require("project");
Dactylographie
Project.
me donne les options Intellisense qui étaient le point de tout cet exercice.J'espère que cela aidera quelqu'un d'autre à utiliser leurs projets TypeScript npm comme bibliothèques internes dans leurs projets plus importants.
PS: Je crois que cette approche de compilation de projets en modules npm qui peuvent être utilisés dans d'autres projets rappelle le
.dll
dans le.NET
monde. Je pourrais bien imaginer des projets organisés dans une solution dans VS Code où chaque projet produit un package npm qui peut ensuite être utilisé dans un autre projet de la solution en tant que dépendance.Puisqu'il m'a fallu beaucoup de temps pour comprendre cela, je l'ai publié au cas où quelqu'un serait coincé ici.
Je l'ai également posté pour un bug fermé à: https://github.com/npm/npm/issues/11546
Cet exemple a été téléchargé sur Github: vchatterji / tsc-seed
la source
Vous devez publier les sources dactylographiées d'origine au lieu de la définition de type. Dans
package.json
laissez la propriété 'types' pointer vers le fichier * .ts.*.d.ts
sont bons pour annoter les bibliothèques JS existantes, mais en tant que consommateur, je préfère lire le code dactylographié plutôt que de basculer entre les définitions de type et le code JS généré de bas niveau.la source
*.d.ts
est la manière recommandée de le faire, même si je suis d'accord avec vous les avantages d'inclure des*.ts
fichiers, typescriptlang.org/docs/handbook/declaration-files/…Je suis principalement la suggestion de Varun Chatterji
Mais, je voudrais montrer un exemple complet avec des tests unitaires et une couverture de code et le publier
npm
et les importer en utilisantjavascript
outypescript
Ce module est écrit en utilisant
typescript 2.2
et il est important de configurer leprepublish
hook pour compiler le code en utilisanttsc
avant de le publier sur npmhttps://github.com/sweetim/haversine-position
https://www.npmjs.com/package/haversine-position
la source
Vous pouvez utiliser autodts pour gérer la distribution et l'utilisation de
.d.ts
fichiers de npm également sans prise en charge de l'IDE Atom.autodts generate
regroupera tous vos propres.d.ts
fichiers pour les publier sur npm, etautodts link
gère les références à d'autres packages installés, qui peuvent ne pas toujours être directement sousnode_modules
dans un projet plus vaste divisé en plusieurs sous-packages.Les deux commandes lisent leurs paramètres depuis
package.json
ettsconfig.json
dans le style «convention sur la configuration».Il y a une autre réponse sur stackoverflow et un article de blog avec plus de détails.
la source
Chez Lossless, nous avons créé un outil de développement TypeScript unique pour les packages npm: https://gitzone.gitlab.io/npmts/
la source