Как вы, наверное, обнаружили, NPM на самом деле не указывает конкретно, что там должно быть, скорее у них есть список игнорируемых файлов по умолчанию . Многие люди даже не используют его, поскольку все в вашем по умолчанию .gitignoreигнорируется npm, если .npmignoreне существует. Кроме того, многие файлы уже игнорируются по умолчанию независимо от настроек, а некоторые файлы всегда исключаются из игнорирования, как указано в приведенной выше ссылке.
Не так много официальных утверждений о том, что всегда должно быть там, потому что это в основном подмножество .gitignore, но из того, что я извлек из использования node в течение 5 лет, вот что я придумал.
Примечание. Под производством я подразумеваю любое время, когда ваш модуль кем-то используется, а не для разработки самого модуля.
Предрелизные кросс-скомпилированные исходники
Плюсы : если вы используете язык, который кросс-компилируется в JavaScript, вы можете выполнить предварительную компиляцию перед выпуском и не включать .coffeeфайлы в свой пакет, но продолжать отслеживать их в своем репозитории git.
Остатки файлов сборки
Плюсы : у людей, использующих такие вещи, node-gypмогут быть объектные файлы, которые создаются во время сборки и никогда не должны входить в пакет.
Минусы : это всегда должно быть в .gitignoreлюбом случае. Вы должны поместить эти вещи сюда, если вы уже используете .npmignoreфайл, поскольку он переопределяет .gitignoreс точки зрения npm.
Тесты
Плюсы : меньше багажа в вашем производственном коде.
Минусы : вы не можете запускать тесты в реальных средах при небольшой вероятности сбоя системы, такого как устаревшая версия запущенного узла, которая вызывает сбой теста.
Настройки непрерывной интеграции / Мета-файлы
Плюсы : Опять же, меньше багажа. Такие вещи, как .travis.ymlне требуются для использования, тестирования или просмотра кода.
Документы и примеры кода без использования readme
Плюсы : меньше багажа. Некоторые люди существуют в школе мысли, где, если вы не можете выразить хотя бы минимальную жизнеспособную функциональность в своем Readme, ваш модуль слишком велик.
Минусы : люди не могут видеть исчерпывающую документацию и примеры кода в своей файловой системе. Им придется посетить репозиторий (для чего также требуется подключение к Интернету).
Объекты Github-страниц
Плюсы : вам, конечно, не нужно засорять свои выпуски CNAMEфайлами или заполнителями, index.htmlесли вы используете свой модуль, который также выполняет двойную функцию в качестве gh-pagesрепозитория.
bower.json и друзья
Плюсы : если вы решите встроить свои зависимости перед выпуском, вам не нужно, чтобы конечный пользователь установил bower, а затем установил с ним больше вещей. Я бы лично держал это в упаковке. Когда я делаю npm install, я должен полагаться только на npm и никакие другие внешние источники.
По сути, вы должны когда-либо использовать его, если есть что-то, что вы хотите сохранить вне вашего пакета npm, но не из вашего репозитория npm. Это не длинный список элементов, но npm предпочел бы встроить функциональность, чем заставлять людей застревать в своем пакете с нерелевантными объектами.
Нет способа удалить неиспользуемые скрипты из файла package.json. Например, сценарии тестирования? Мне немного неловко удалять все, но хранить скрипты в файле ...
inf3rno
Нет, нет. Вы можете опустить их в package.json, так как они в любом случае предназначены для NPM, и если вы запускаете только тесты, вы можете получить к ним доступ с помощью исходной команды для их запуска.
Ваш пакет должен содержать только производственные файлы времени выполнения.
Это упростит загрузку вашего пакета и ускорит его загрузку.
Мой вклад в эти ответы:
.npmignore - это способ черного списка для выбора файла пакета. Но с практической точки зрения вы можете занести в белый список файлы, которые необходимо включить в свой пакет, используя поле files в вашем package.json:
{
"files": [
"lib/",
"index.js"
]
}
Я думаю, что это проще, ориентировано на будущее и имеет лучшую семантику;)
... не говоря уже о более легком для запоминания и менее подверженном случайностям в использовании (если вы настолько забывчивы, насколько это возможно). Спасибо за подсказку, это здорово.
Коннор
2
Мне нравится такой подход.
Brady Holt
2
Я думаю, вы даже можете опустить "index.js", предполагая, что это "главный" файл в вашем package.json :)
Бен Джордж
Можно игнорировать изображения и ненужные документы. Но игнорировать тесты, вероятно, не лучшая идея. Загрузка дополнительных КБ не занимает так много времени, а выполнение рекурсииnpm test по всем модулям node_modules может дать вам подсказку, работает ли что-то по-другому в определенной среде.
adelriosantiago 06
5
@ NicolásFantone файлы свойство принимать Глоб шаблон , а также. Таким образом, мы можем игнорировать тестовые файлы, не создавая .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj
15
Чтобы уточнить, в любое время, когда кто-то это сделает npm install your-library, npm загрузит все исходные файлы, которые включает репо, за исключением файлов, которые вы включаете в свой .npmignore.
Знайте, что людям, устанавливающим вашу библиотеку, понадобится только ваша запущенная библиотека, в остальном ничего не потребуется.
Например, когда кто-то устанавливает библиотеку, вероятно, он / она не заботится о ваших .travis.ymlили ваших .jshintrcфайлах, или даже о некоторых изображениях, файлах Grunt, документации и т. Д.
.npmignore может позволить вашему пакету npm иметь меньше файлов и быстрее загружаться
Настроение здесь хорошее, но уточнить: .npmignoreне влияет напрямую на то, что загружается , это влияет на то, что входит в ваш пакет, когда вы публикуете и загружаете npm . Это косвенно создает файлы меньшего размера для загрузки.
Марк Стосберг
3
Не включайте свои тесты. Часто тесты в 5 раз превышают размер реальной кодовой базы. Пока ваши тесты находятся на Github и т. Д., Этого достаточно.
Но что вам абсолютно необходимо сделать, так это протестировать свой пакет NPM в опубликованном формате . Создайте несколько дымовых тестов, которые находятся в реальной кодовой базе, но не являются частью набора тестов.
npm install yourlibrary
, например, когда кто-то звонит.travis.yml
и.jshintrc
.npmignore
или"files"
( docs.npmjs.com/files/package.json#files ).Ответы:
Как вы, наверное, обнаружили, NPM на самом деле не указывает конкретно, что там должно быть, скорее у них есть список игнорируемых файлов по умолчанию . Многие люди даже не используют его, поскольку все в вашем по умолчанию
.gitignore
игнорируетсяnpm
, если.npmignore
не существует. Кроме того, многие файлы уже игнорируются по умолчанию независимо от настроек, а некоторые файлы всегда исключаются из игнорирования, как указано в приведенной выше ссылке.Не так много официальных утверждений о том, что всегда должно быть там, потому что это в основном подмножество
.gitignore
, но из того, что я извлек из использования node в течение 5 лет, вот что я придумал.Примечание. Под производством я подразумеваю любое время, когда ваш модуль кем-то используется, а не для разработки самого модуля.
Предрелизные кросс-скомпилированные исходники
.coffee
файлы в свой пакет, но продолжать отслеживать их в своем репозитории git.Остатки файлов сборки
node-gyp
могут быть объектные файлы, которые создаются во время сборки и никогда не должны входить в пакет..gitignore
любом случае. Вы должны поместить эти вещи сюда, если вы уже используете.npmignore
файл, поскольку он переопределяет.gitignore
с точки зрения npm.Тесты
Настройки непрерывной интеграции / Мета-файлы
.travis.yml
не требуются для использования, тестирования или просмотра кода.Документы и примеры кода без использования readme
Объекты Github-страниц
CNAME
файлами или заполнителями,index.html
если вы используете свой модуль, который также выполняет двойную функцию в качествеgh-pages
репозитория.bower.json и друзья
npm install
, я должен полагаться только на npm и никакие другие внешние источники.По сути, вы должны когда-либо использовать его, если есть что-то, что вы хотите сохранить вне вашего пакета npm, но не из вашего репозитория npm. Это не длинный список элементов, но npm предпочел бы встроить функциональность, чем заставлять людей застревать в своем пакете с нерелевантными объектами.
источник
Я согласен с коротким и ответом Lante синтетического в и большом ответе Samt в :
Мой вклад в эти ответы:
.npmignore - это способ черного списка для выбора файла пакета. Но с практической точки зрения вы можете занести в белый список файлы, которые необходимо включить в свой пакет, используя поле files в вашем package.json:
{ "files": [ "lib/", "index.js" ] }
Я думаю, что это проще, ориентировано на будущее и имеет лучшую семантику;)
источник
npm test
по всем модулям node_modules может дать вам подсказку, работает ли что-то по-другому в определенной среде..npmignore
.files: ["lib", "!lib/**/*.test.js"]
. :)Чтобы уточнить, в любое время, когда кто-то это сделает
npm install your-library
, npm загрузит все исходные файлы, которые включает репо, за исключением файлов, которые вы включаете в свой.npmignore
.Знайте, что людям, устанавливающим вашу библиотеку, понадобится только ваша запущенная библиотека, в остальном ничего не потребуется.
Например, когда кто-то устанавливает библиотеку, вероятно, он / она не заботится о ваших
.travis.yml
или ваших.jshintrc
файлах, или даже о некоторых изображениях, файлах Grunt, документации и т. Д..npmignore
может позволить вашему пакету npm иметь меньше файлов и быстрее загружатьсяисточник
.npmignore
не влияет напрямую на то, что загружается , это влияет на то, что входит в ваш пакет, когда вы публикуете и загружаете npm . Это косвенно создает файлы меньшего размера для загрузки.Не включайте свои тесты. Часто тесты в 5 раз превышают размер реальной кодовой базы. Пока ваши тесты находятся на Github и т. Д., Этого достаточно.
Но что вам абсолютно необходимо сделать, так это протестировать свой пакет NPM в опубликованном формате . Создайте несколько дымовых тестов, которые находятся в реальной кодовой базе, но не являются частью набора тестов.
Вы можете прочитать о тестировании вашего пакета после его архивирования здесь: https://github.com/ORESoftware/r2g
Как проверить результат npm publish без фактической публикации в NPM?
источник