"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 lib
ni 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).