81 votes

Comment utilisez-vous les "fichiers" et "annuaires" de propriétés dans le paquet.json?

Si un package.json a files prop, et/ou un directories prop:

  "files": [
    "./src/assets/fonts/"
  ],
  "directories": {
     "assets:": "./src/assets"
  }

Quelles sont certaines des façons de faire usage? La documentation ne mentionne pas ce qui peut être fait avec eux une fois qu'ils ont été spécifiés.

Par exemple, les fichiers docs disent:

Le champ "fichiers" est un tableau de fichiers à inclure dans votre projet. Si vous avez le nom d'un dossier dans le tableau, alors il va aussi inclure les fichiers dans ce dossier.

Ce n' "inclure dans votre projet" signifie? Inclure les cas où? Comment sont-ils accessible maintenant qu'ils ne l'étaient pas avant?

Dans les répertoires de l'article, les docs disent:

Dans l'avenir, cette information peut être utilisée dans d'autres façons créatives.

Quelles sont les façons créatives il est utilisé?

99voto

jasonkarns Points 324

"inclure dans votre projet" désigne les fichiers seront dans le contenu de l'archive qui est créé lorsque vous exécutez npm publish. Vous pouvez également exécuter npm pack pour générer l'archive pour l'inspection sans déclenchement de publier. De cette façon, vous pouvez ouvrir l'archive générée et inspecter les fichiers qui ont/n'ont pas été inclus.

Alors qu' .npmignore (ou .gitignore comme un proxy, si pas d' .npmignore) fonctionne comme une liste noire de fichiers à ignorer (ce dont tout le reste par défaut), l' files tableau est une liste blanche. C'est, au lieu de tout mettre par défaut, si files tableau est spécifié, tout est exclue par défaut et que les fichiers sont explicitement énumérées seront inclus dans le package de la tarball.

Comme un exemple, disons que votre paquet est une bibliothèque destinée pour la consommation dans le navigateur. Votre code est en lib/, et que vous exécutez browserify à compiler dans un navigateur compatible lib en dist/index.js. Vous commencez avec un tas de fichiers listés en .gitignore, qui est utilisé comme le defacto .npmignore qui n'existe pas. Mais maintenant qu' dist/ est plein de fichiers générés, vous voulez ignoré depuis le repo git. Si vous les ajoutez à l' .gitignore, ils seront exclus du repo git, mais ils seront également ignoré à partir du package archive. Donc, vous avez deux options: dupliquer .gitignore comme .npmignore , mais seulement de liste dist/ en .gitignore. Si vous faites cela, vous aurez à garder les deux fichiers de presque-mais-pas-tout à fait dans la synchronisation. De cette façon, est tedius et sujette à erreur.

L'autre alternative est de ne pas avoir un .npmignore, et, au lieu de simplement afficher la liste des fichiers que vous voulez vraiment dans le paquet, en files tableau. README.*, package.json, CHANGELOG.* (peut-être quelques autres) sont automatiquement inclus dans l'archive tar quel que soit. Si vous ajoutez simplement de l' "files": [ "dist" ] et vous avez terminé. Maintenant votre package archive de ne pas inclure la source d'origine JS à partir de libni tests/ etc mais ne contiennent que les compilées lib en dist/.

Comme pour directories, en général, je la liste l' lib (pour es5), src (pour l'es6, coffeescript, tapuscrit etc sources), dist (pour le navigateur ou vm-des constructions particulières), test, output (pour les temporaires, les fichiers générés comme des rapports de couverture, etc), doc, etc. Si cette propriété n'est pas utilisée directement par npm ou d'autres outils, il fait de la structure de répertoire explicite. De plus, il rend les répertoires référençable dans mnp scripts comme suit:

"scripts": {
  "clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output",
  "lint": "eslint $npm_package_directories_src",
  "test": "teenytest $npm_package_directories_test",
}

De cette façon, les répertoires sont bien spécifié qu'une seule fois, et si ils changent, ils ont seulement besoin de changé en un lieu unique (plutôt que dans le package.json).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X