Чи повинен я .npmignore мої тести?


91

Що саме я повинен вкласти .npmignore?

Тести? Такі речі , як .travis.yml, .jshintrc? Все, що не потрібно під час запуску модуля (крім readme)?

Я не можу знайти жодних вказівок щодо цього.


4
слід ігнорувати все, що не потрібно, коли хтось телефонує npm install yourlibrary, наприклад .travis.ymlі.jshintrc
lante

справді? навіть readme? чи рекомендується це офіційно де-небудь?
callum

2
README автоматично включається незалежно від .npmignoreабо "files"( docs.npmjs.com/files/package.json#files ).
Ніколас Фантоне,

Відповіді:


86

Як ви, напевно, виявили, NPM насправді не вказує конкретно, що там має входити, швидше, у них є список ігнорованих за замовчуванням файлів . Багато людей навіть не використовують його, оскільки все у вашому .gitignoreігнорується npmза замовчуванням, якщо .npmignoreвоно не існує. Крім того, багато файлів вже ігноруються за замовчуванням незалежно від налаштувань, а деякі файли завжди виключаються з ігнорування, як зазначено у посиланні вище.

Існує не так багато офіційних відомостей про те, що завжди повинно бути там, тому що це в основному підмножина .gitignore, але з того, що я збираю, використовуючи node протягом 5-ти років, ось що я придумав.

Примітка: Під виробництвом я маю на увазі будь-який час, коли хтось використовує ваш модуль, а не для розробки самого модуля.


Передвипускні перехресні збірники джерел

  • Плюси : Якщо ви використовуєте мову, яка перехрещується в JavaScript, ви можете попередньо скомпілювати перед випуском і не включати .coffeeфайли у свій пакет, а продовжувати відстежувати їх у своєму сховищі git.

Побудуйте залишки файлів

  • Плюси : Люди, які використовують такі речі, як, node-gypможливо, мають об’єктні файли, які генеруються під час збірки, і які ніколи не повинні входити в пакет.
  • Мінуси : Це завжди повинно йти в .gitignoreбудь-якому випадку. Ви повинні помістити ці речі всередину тут, якщо ви вже використовуєте .npmignoreфайл, оскільки він замінює .gitignoreз точки зору npm.

Тести

  • Плюси : Менше багажу у виробничому коді.
  • Мінуси : Ви не можете запускати тести в реальних середовищах, якщо існує невелика ймовірність виникнення специфічної для системи несправності, наприклад, застарілої версії запущеного вузла, що спричиняє помилку тесту.

Налаштування безперервної інтеграції / метафайли

  • Плюси : Знову ж, менше багажу. Такі речі, .travis.ymlякі не потрібні для використання, тестування або перегляду коду.

Непрочитані документи та приклади коду

  • Плюси : менше багажу. Деякі люди існують у школі думок, де, якщо ви не можете висловити хоча б мінімум життєздатних функціональних можливостей у вашому Readme, ваш модуль занадто великий.
  • Мінуси : Люди не можуть бачити вичерпну документацію та приклади коду у власній файловій системі. Їм довелося б відвідати сховище (що також вимагає підключення до Інтернету).

Об'єкти Github-сторінок

  • Плюси : Вам, звичайно, не потрібно засипати свої випуски CNAMEфайлами або заповнювачами index.html, якщо ви використовуєте свій модуль, він також має подвійний обов'язок як gh-pagesсховище.

bower.json та друзі

  • Плюси : Якщо ви вирішили вбудувати свої залежності до випуску, вам не потрібно, щоб кінцевий користувач встановлював bower, а потім інсталюйте більше речей із цим. Я б особисто тримав ці речі в упаковці. Коли я роблю npm install, я повинен покладатися лише на npm, а не на інші зовнішні джерела.

По суті, вам слід коли-небудь користуватися ним, якщо є щось, що ви хочете залишити поза своїм пакетом npm, але не поза вашим сховищем npm. Це не довгий перелік елементів, але npm скоріше вбудував би функціонал, аніж люди застрягли у своєму пакеті з нерелевантними об'єктами.


Чи не існує способу видалити непридатні для використання сценарії з файлу package.json. Наприклад, тестування сценаріїв? Я відчуваю себе трохи безладно, щоб видалити все, але зберігати сценарії у файлі ...
inf3rno

Ні, немає. Ви можете опустити їх із пакета package.json, оскільки це в будь-якому випадку в першу чергу для NPM, і якщо ви виконуєте лише тести, ви можете отримати до них доступ за допомогою оригінальної команди для їх запуску.
SamT

64

Я згоден з коротким і відповіддю Lante синтетичного в і великому відповіді Samt в :

  • Ви не повинні включати свої тести у свій пакет.
  • Ваш пакет повинен містити лише виробничі файли виконання.
  • Це зробить ваш пакет більш простим і швидким для завантаження.

Мій внесок у ці відповіді:

.npmignore - спосіб чорного списку для вибору файлу пакета. Але більш практичним чином ви можете додати в білий список файли, які потрібно включити у свій пакет, за допомогою поля файлів у файлі package.json:

{
  "files": [
    "lib/",
    "index.js"
  ]
}

Я думаю, що це простіше, майбутнє підтвердження і має кращу семантику;)


3
... сказати нічого простішого для запам’ятовування та менш схильного до аварій (якщо ви такі ж забудькуваті, як і я). Дякую за підказку, це чудово.
Коннор

2
Мені подобається такий підхід.
Brady Holt

2
Я думаю, ви навіть можете опустити "index.js", припустивши, що це "основний" файл у вашому package.json :)
Бен Джордж,

Ігнорування зображень та непотрібних документів - це нормально. Але ігнорування тестів, мабуть, не є хорошою ідеєю. Завантаження деяких додаткових KB не займає стільки часу, а рекурсивне використання npm testвсіх модулів node_ може дати вам підказку, якщо в певному середовищі щось працює по-іншому.
adelriosantiago

3
@ NicolásFantone Властивість файлів також приймає шаблон глобуса . Тож ми можемо ігнорувати тестові файли, не створюючи .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Сурешрай

15

Щоб лише пояснити, щоразу, коли хтось це робить npm install your-library, npm завантажує всі вихідні файли, що містяться в репо, крім файлів, які ви включаєте у свій .npmignore.

Знайте, що людям, які встановлюють вашу бібліотеку, потрібна буде лише ваша бібліотека, що-небудь ще не буде необхідним.

Наприклад, коли хтось встановлює бібліотеку, можливо, він / вона не піклується про ваші .travis.ymlчи ваші .jshintrcфайли, або навіть про деякі зображення, файли Grunt, документацію тощо.

.npmignore може дозволити вашому пакунку npm мати менше файлів і швидше завантажуватись


1
Настрої тут хороші, але для уточнення: .npmignoreце не впливає безпосередньо на те, що завантажується , воно впливає на те, що потрапляє у ваш пакет, коли ви публікуєте та завантажуєте npm . Це побічно створює менші файли для завантаження.
Марк Стосберг,

2

Не включайте свої тести. Часто тести становлять приблизно 5-кратний розмір фактичної кодової бази. Поки ваші тести проводяться на Github тощо, це досить добре.

Але те, що ви абсолютно повинні зробити, - це протестувати свій пакет NPM у опублікованому форматі . Створіть кілька тестів на дим, які містяться у власне кодовій базі, але не є частиною набору тестів.

Ви можете прочитати про тестування вашого пакету після його розкриття, тут: https://github.com/ORESoftware/r2g

Як перевірити результат `npm публікації`, фактично не публікуючи в NPM?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.