Должен ли я.npmignore мои тесты?
Что именно я должен положить в .npmignore
?
Тесты? Вещи как .travis.yml
, .jshintrc
? Что-нибудь, что не нужно при запуске модуля (кроме readme)?
Я не могу найти никаких указаний по этому вопросу.
5 ответов
Как вы, вероятно, обнаружили, NPM на самом деле не указывает, что именно должно происходить, скорее, у них есть список игнорируемых по умолчанию файлов. Многие люди даже не используют это как все в вашем .gitignore
игнорируется в npm
по умолчанию, если .npmignore
не существует Кроме того, многие файлы уже игнорируются по умолчанию независимо от настроек, а некоторые файлы всегда исключаются из списка игнорируемых, как указано в приведенной выше ссылке.
Там не так много официальных о том, что всегда должно быть там, потому что это в основном подмножество .gitignore
Но из того, что я получаю от использования узла в течение 5 лет, вот что я придумала.
Примечание: под производством я подразумеваю любое время, когда ваш модуль кем-то используется, а не разрабатывается на самом модуле.
Предварительно выпущенные кросс-скомпилированные источники
- Плюсы: если вы используете язык, который кросс-компилируется в JavaScript, вы можете прекомпилировать перед выпуском и не включать
.coffee
файлы в вашем пакете, но продолжайте отслеживать их в вашем git-репозитории.
Остатки файла сборки
- Плюсы: люди используют такие вещи, как
node-gyp
может иметь объектные файлы, которые генерируются во время сборки, которые никогда не должны входить в пакет. - Минусы: это всегда должно идти в
.gitignore
тем не мение. Вы должны поместить эти вещи здесь, если вы используете.npmignore
файл уже перезаписывает.gitignore
с точки зрения нпм.
тесты
- Плюсы: меньше багажа в вашем производственном коде.
- Минусы: вы не можете запускать тесты в реальных средах, поскольку существует небольшая вероятность того, что произойдет сбой системы, например устаревшая версия работающего узла, которая приведет к сбою теста.
Настройки непрерывной интеграции / метафайлы
- Плюсы: опять же меньше багажа. Такие вещи, как
.travis.yml
не требуются для использования, тестирования или просмотра кода.
Документы без чтения и примеры кода
- Плюсы: меньше багажа. Некоторые люди существуют в школе мысли, где, если вы не можете выразить хотя бы минимальную жизнеспособную функциональность в вашем Readme, ваш модуль слишком велик.
- Минусы: люди не могут видеть исчерпывающую документацию и примеры кода в своей файловой системе. Они должны были бы посетить хранилище (которое также требует подключения к интернету).
Github-страницы объектов
- Плюсы: Вам, конечно, не нужно засорять свои релизы
CNAME
файлы или заполнительindex.html
s, если вы используете свой модуль, выполняет двойную функцию в качествеgh-pages
хранилище также.
bower.json и друзья
- Плюсы: если вы решите встроить свои зависимости до выпуска, вам не нужно, чтобы конечный пользователь устанавливал bower, а затем устанавливайте больше с этим. Лично я бы оставил все это в упаковке. Когда я делаю
npm install
Я должен полагаться только на npm и никаких других внешних источников.
По сути, вы должны когда-либо использовать его, если есть что-то, что вы хотите сохранить в своем пакете npm, но не в своем репозитории npm. Это не длинный список элементов, но npm лучше встроит функциональность, чем в застревание людей с нерелевантными объектами в их пакете.
Я согласен с кратким и синтаксическим ответом Ланте и большим ответом SamT:
- Вы не должны включать свои тесты в ваш пакет.
- Ваш пакет должен содержать только рабочие файлы времени выполнения.
- Это сделает ваш пакет более простым и быстрым для загрузки.
Мой вклад в эти ответы:
.npmignore - это черный список для выбора файла пакета. Но более практичным способом вы можете включить в белый список файлы, которые нужно включить в ваш пакет, используя поле files в вашем package.json:
{
"files": [
"lib/",
"index.js"
]
}
Я думаю, что это проще, будущее и имеет лучшую семантику;)
Просто чтобы уточнить, каждый раз, когда кто-то делает npm install your-library
, npm загрузит все исходные файлы, которые включает репо, кроме файлов, которые вы включили в .npmignore
,
Знайте, что люди, устанавливающие вашу библиотеку, будут нуждаться только в том, чтобы ваша библиотека работала, все остальное не понадобится
Например, когда кто-то устанавливает библиотеку, вероятно, он / она не заботится о вашей .travis.yml
или ваш .jshintrc
файлы или даже некоторые изображения, файлы Grunt, документация и т. д.
.npmignore
может позволить вашему пакету npm иметь меньше файлов и быстрее загружаться
Не включайте ваши тесты. Часто тесты примерно в 5 раз больше фактической базы кода. Пока ваши тесты Github и т. Д., Этого достаточно.
Но то, что вы обязательно должны сделать, это протестировать ваш пакет NPM в опубликованном формате. Создайте некоторые тесты дыма, которые находятся в фактической базе кода, но не являются частью набора тестов.
Вы можете прочитать о тестировании вашего пакета после его архивирования, здесь: https://github.com/ORESoftware/r2g
Как проверить результат `npm publish` без фактической публикации в NPM?
Если вы хотите, чтобы ваш пакет получил высокую оценку качества на npmjs.com, вам следует включить все, что npm считает важным:
Качество включает в себя такие факторы, как наличие файла README, стабильность, тесты, актуальные зависимости, собственный веб-сайт и сложность кода. (Источник )
Итак, вы, вероятно, захотите включить в пакет свой README. И после некоторых экспериментов: включение тестов (а вместе с ними и исходников) также увеличивает ваш показатель качества.