Должен ли я.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.htmls, если вы используете свой модуль, выполняет двойную функцию в качестве 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. И после некоторых экспериментов: включение тестов (а вместе с ними и исходников) также увеличивает ваш показатель качества.

Другие вопросы по тегам