«включить в свой проект» означает, что файлы будут находиться в упакованном архиве, который создается при запуске npm publish
. Вы также можете запустить npm pack
для генерации tarball для проверки без фактического запуска публикации. Таким образом, вы можете открыть созданный tarball и проверить, какие файлы были/не были включены.
Хотя .npmignore
(или .gitignore
в качестве прокси-сервера, если не .npmignore
) функционирует как черный список файлов, чтобы игнорировать (таким образом, в том числе и все остальное по умолчанию), files
массив является белый список. То есть вместо того, чтобы включать все по умолчанию, если указан массив files
, все исключено по умолчанию, и только те файлы, явно перечисленные, будут включены в упакованный архив.
В качестве примера скажем, что ваш пакет представляет собой библиотеку, предназначенную для использования в браузере. Ваш код находится в lib/
, и вы запустите браузер, чтобы скомпилировать его в совместимую с браузером библиотеку по адресу dist/index.js
. Вы начинаете с кучи файлов, перечисленных в .gitignore
, который используется как defacto .npmignore
, которого не существует. Но теперь, когда dist/
полон сгенерированных файлов, вы хотите, чтобы они игнорировались из git repo. Если вы добавите их в .gitignore
, они будут исключены из git repo, , но они также будут проигнорированы из пакета tarball. Таким образом, у вас есть два варианта: дублируйте свой .gitignore
как .npmignore
, но только список dist/
в .gitignore
. Если вы это сделаете, вам придется хранить два файла почти, но не совсем в синхронизации. Этот путь является тедием и подвержен ошибкам.
Другой альтернативой является отсутствие .npmignore
, а вместо этого просто список файлов, которые вы действительно хотите в пакете, в массиве files
. README.*
, package.json
, CHANGELOG.*
(возможно, еще пара) автоматически включаются в архив. Поэтому вы просто добавляете "files": [ "dist" ]
, и все готово.Теперь ваш пакет tarball не будет включать исходный источник JS от lib
, а не tests/
и т. Д., Но вместо этого будет содержать только фактическую скомпилированную библиотеку в dist/
.
Что касается directories
, я обычно Перечислим lib
(для ES5), src
(для ES6, CoffeeScript, машинопись и т.д. источников), dist
(для браузера или VM-специфической версии), test
, output
(для временных сгенерированных файлов, таких как отчеты о покрытии и т. д.), doc
и т. д. Хотя это свойство не используется напрямую npm или другими инструментами, оно делает структуру каталогов явной. Кроме того, он делает каталоги Referenceable в НПХ скриптах так:
"scripts": {
"clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output",
"lint": "eslint $npm_package_directories_src",
"test": "teenytest $npm_package_directories_test",
}
Таким образом, каталоги указаны только один раз, и если они меняются, только нужно изменить в одном месте (а не много на протяжении всего package.json).
Я не уверен, почему это было приостановлено - может кто-то PLS повысить его, его законный вопрос. – Baz