L'écriture de modules NPM en caractères d'imprimerie
Je suis en train de travailler sur mon premier module NPM. J'ai brièvement travaillé avec la machine avant et un gros problème était que, pour de nombreux modules il n'y avait pas de définition de fichiers disponibles. J'ai donc pensé que ce serait une bonne idée d'écrire mon module en caractères d'imprimerie.
Cependant, je ne peux pas trouver toutes les informations sur la meilleure façon de le faire. J'ai trouvé cette question relative à la "Puis-je écrire mnp paquet en coffeescript?" où les gens ne proposer que de l'édition des fichiers javascript. Mais à la différence de la coffeescript fichiers, le fichier d'enregistrement des fichiers pourrait en fait être utiles si elles sont utilisées dans un tapuscrit de l'application.
Dois-je inclure Tapuscrit de fichiers lors de la publication d'un mécanisme de prévention de module, ou devrais-je publier uniquement les fichiers javascript et de fournir les générées .d.les fichiers ts pour DefinitelyTyped?
- Remarques utiles: j'ai écrit le projet, copee, avec blog pour vous guider à travers la mise en place d'un TS de projet à émettre des définitions de type long avec CJS et MES objectifs avant la publication de la ngp. Cela permettra de maximiser l'utilisation avec node.js et les navigateurs aller de l'avant.
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de Nœud module écrit en caractères d'imprimerie : https://github.com/basarat/ts-npm-module
Voici un exemple de fichier d'enregistrement de projet qui utilise ce module d'exemple https://github.com/basarat/ts-npm-module-consume
Fondamentalement, vous avez besoin de :
commonjs
etdeclaration:true
.d.ts
fichierEt puis
.d.ts
.Atome-Tapuscrit seulement fournit un bon flux de travail autour de ce : https://github.com/TypeStrong/atom-typescript#packagejson-support
tsconfig.json
, mais cela semble trop manuel, à mon avis.Recommandé en 2018 avec la Machine 2.x:
declaration: true
àtsconfig.json
pour générer typings.index.ts
package.json
, point à votre générés typings. Par exemple, si votreoutDir
estdist
, puis ajouter"types": "dist/index.d.ts"
à votre forfait json.package.json
, point de votre entrée principale de fichier. Par exemple, si votreoutDir
estdist
et l'entrée principale de fichier estindex.js
, puis ajouter"main": "dist/index.js"
de votre colis.json..npmignore
pour ignorer les fichiers inutiles (par exemple, la source).npm publish
. Utilisation semver spécifications pour les mises à jour (patch /correction de bugnpm version patch
, de non-rupture des ajoutsnpm version minor
, brisant les changements de l'apinpm version major
)Car il m'a mis un certain temps à passer au crible tous les anciens de ressources sur ce sujet sur l'internet (comme celui sur cette page...), j'ai décidé de l'envelopper dans comment-ecrire-un-tapuscrit-bibliothèque avec une mise-à-jour de travail minimale exemple.
.npmignore
fichier de dire npm les fichiers à ignorer lors de la publication (le.ts
fichiers) et un.gitignore
à indiquer à git les fichiers à ignorer (dist/
)C'est une plus récente réponse à l'aide de la Machine 1.8.10:
Mon projet structure:
J'ai ajouté ce qui suit dans
.npmignore
pour éviter d'inclure les fichiers superflus et en garder que le strict minimum pour que le package importé et de travail:Mon
.gitignore
a:Mon
package.json
a:Maintenant, je lance:
npm pack
La résultante de fichier (quand décompressé) a la structure suivante:
Maintenant, je vais le projet, où je veux l'utiliser comme une bibliothèque et tapez:
npm install ./project-1.0.0.tgz
S'installe correctement.
Maintenant, je créer un fichier
index.ts
dans mon projet sur lequel je viens d'installer le mécanisme national de préventionimport Project = require("project");
Tapant
Project.
me donne l'Intellisense options qui a été le point de l'ensemble de l'exercice.Espère que cela aide quelqu'un d'autre en utilisant leur Tapuscrit mnp projets de bibliothèques internes dans leurs grands projets.
PS: je crois que cette approche de la compilation de projets de ngp modules qui peuvent être utilisés dans d'autres projets est pas sans rappeler le
.dll
dans le.NET
monde. Je pourrais très bien imaginer des projets organisés dans une Solution de VS Code où chaque projet génère un package npm qui peut ensuite être utilisé dans un autre projet dans la solution comme une dépendance.Puisqu'il a fallu un certain temps pour moi de trouver cela, je l'ai posté dans le cas où quelqu'un est coincé ici.
J'ai aussi posté il fermé bug à:
https://github.com/npm/npm/issues/11546
Cet exemple a été téléchargé sur Github: vchatterji/tsc-graine
Vous devez publier le tapuscrit original de sources au lieu de la définition de type. Dans
package.json
laisser les "types" de la propriété de point à l' *.ts fichier.*.d.ts
sont bonnes pour annoter existant libs JS, mais en tant que consommateur, je préfère lire le tapuscrit du code de la commutation entre les définitions de type et de bas-niveau, généré du code JS.*.d.ts
est recommandé de le faire, si je suis d'accord avec vous les avantages d'inclure*.ts
fichiers,typescriptlang.org/docs/handbook/declaration-files/...J'ai surtout suivi la suggestion de Varun Chatterji
Mais, je voudrais montrer un exemple complet avec les tests unitaires et la couverture de code et de le publier dans
npm
et de les importer à l'aide dejavascript
outypescript
Ce module est écrit à l'aide
typescript 2.2
et il est important de configurer leprepublish
crochet pour compiler le code à l'aide detsc
avant de publier les mnphttps://github.com/sweetim/haversine-position
https://www.npmjs.com/package/haversine-position
Vous pouvez utiliser autodts pour gérer la distribution et l'utilisation de
.d.ts
des fichiers à partir de mnp aussi sans le soutien de l'Atome IDE.autodts generate
permettra de regrouper toutes vos propres.d.ts
fichiers ensemble pour la publication sur la ngp, etautodts link
poignées de références à d'autres paquets installés, ce qui peut ne pas toujours être directement sousnode_modules
dans un projet plus vaste divisé en plusieurs sous-paquets.Les deux commandes de lire leurs paramètres à partir
package.json
ettsconfig.json
dans la "convention over configuration" de style.Il y a une autre réponse sur stackoverflow et un post de blog avec plus de détails.
À Lossless nous avons créé un Tapuscrit dev outil pour les packages npm: https://gitzone.gitlab.io/npmts/