web-dev-qa-db-fra.com

Comment npm publier un dossier spécifique mais en tant que racine du paquet

J'ai un projet qui inclut une tâche gulp pour la construction et le conditionnement des sources et la publication dans un répertoire appelé dist. Mon objectif est de le publier sous la forme d'un paquet npm, mais uniquement de mon dossier dist. La documentation npm indique que je peux utiliser la balise files pour spécifier les fichiers à exporter. Ça marche. Mais la documentation dit aussi que:

Si vous nommez un dossier dans le tableau, il inclura également les fichiers dans ce dossier

Le résultat est un package npm, ressemblant à node_modules:

 generated npm package

Mais j'aimerais voir tous mes fichiers à la racine du paquet (sans ce dossier dist). Mon fichier index.js se trouve dans le dossier dist, mais doit être à la racine. J'ai essayé de définir le tag files comme /dist/**/* mais cela n'a pas fonctionné.

Comment puis-je y arriver?

29
robsonrosa

J'ai le même désir, mais je pense que (il n'y a aucun moyen de le faire en utilisant uniquement des outils npm}. Un autre script/outil peut être utilisé pour organiser votre paquet. 

Solution alternative

Actuellement, je copie mon package.json dans le dossier dist, puis j'exécute npm pack dans le dossier dist. Je pense que cela fournit essentiellement l'arrangement souhaité de notre paquet.

Voici quelques lectures pertinentes sur cette conception npm: Why no Directories.lib in Node

Il est également intéressant de noter que jspm respecte l’option directories.lib dans package.json et réorganise les fichiers lors de la résolution du package npm. Tout cela est arrivé pour moi parce que je souhaite construire une bibliothèque commune pouvant être utilisée par jspm ou npm/webpack.

21
scvnc

Je vous recommande vivement d'utiliser .npmignore au lieu de déplacer ou de copier des éléments, en particulier si vous utilisez un élément de configuration pour les déploiements, et d'ajouter simplement les fichiers que vous ne souhaitez pas publier.

https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-your-package

Exemple:

#tests
test
coverage

#build tools
.travis.yml
.jenkins.yml
.codeclimate.yml

#linters
.jscsrc
.jshintrc
.eslintrc*

#editor settings
.idea
.editorconfig

Mettre à jour:

Si vous voulez scinder votre code, en utilisant différents packages npm en utilisant le même référentiel, je suis tombé sur ce projet récemment: Lerna et semble vraiment bien.

Peut-être devriez-vous jeter un oeil

1
Thram

J'ai un problème similaire à celui de l'affiche originale (@robsonrosa). Dans mon cas, j'utilise typecript qui compile dans un répertoire dist. Bien que je puisse compiler TypeScript dans le répertoire racine, je pense que la meilleure solution consiste à générer un fichier package.json séparé dans le répertoire dist.
Ceci est similaire à la suggestion de @scvnc de copier le package.json mais avec une torsion:

Dans le cadre du processus de création de package, vous devez générer le package.json pour le package qui est basé mais distinct de vous le fichier package.json principal du répertoire racine

La justification:

  • Le fichier racine package.json est le fichier de développement. Il peut contenir des scripts ou des dépendances de développement qui ne sont d'aucune utilité pour l'utilisateur du package, mais peuvent poser des problèmes de sécurité. Votre procédure d’emballage peut inclure un code qui supprime ces informations du package.json de production.
  • Vous souhaiterez peut-être déployer votre package dans différents environnements pouvant nécessiter différents fichiers (par exemple, vous voudrez peut-être avoir différentes versions ou dépendances).
0
Eli Algranti