Любой, кто опубликовал модуль npm, знает, насколько это болезненно.

Если вы не будете осторожны, вы часто окажетесь в аду переиздания. Кроме того, в зависимости от того, какой пакет pf вы публикуете, молитесь богам npm 🙏, чтобы вы не публиковали конфиденциальную информацию.

В любом случае, вот небольшой совет, который я узнал недавно. Я, наверное, очень, очень опаздываю на вечеринку, но, надеюсь, это будет кому-то полезно.

Задача с .npmignore

Раньше единственным способом, которым я знал, как ограничить то, что является npm publish, было .npmignore. Однако этот шаблон проблематичен/болезнен по нескольким причинам.

  1. Как это взаимодействует с .gitignore. По умолчанию npm не будет публиковать ничего, что в любом случае игнорируется Git, что удобно до тех пор, пока не появится хоть один элемент, отличающийся от того, что вы действительно хотите опубликовать. Вот где обычно появляется .npmignore. Проблема в том, что добавление .npmignore полностью заменяет правила соответствия .gitignoreони не суммируются. Это приводит к тому, что приходится поддерживать два набора правил, что, по моему опыту, может (и, честно говоря, будет) не синхронизироваться и может привести к непреднамеренной публикации файлов, которые, как вы думали, вы исключили.
  2. Возможно, большая проблема заключается в подходе «черного списка». Это может быть больше личным мнением, но в целом я гораздо лучше осведомлен о файлах, которые я хочу публиковать, чем о файлах, которые я не публикую, что усиливает мое ощущение .npmignore неинтуитивности.

Белый список файлов 🙌

Опять же, возможно, мы очень опоздали на вечеринку, но вот небольшой совет!

Как я уже говорил, обычно я гораздо лучше осведомлен о файлах, которые я хочу публиковать, чем о тех, которые не хочу, так что это больше соответствует этому мышлению. Ваш package.json может принимать массив путей в свойстве files, указывающем файлы и/или каталоги, которые вы хотите опубликовать; это белый список!

{
  "name": "[your-package-name]",
  "version": "1.0.0",
  "description": "",
  "main": "[your-main-file]",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "files": [
   "dist/"
  ],
  "keywords": [],
  "author": "[your-details]",
  "license": "[your-package-license]"
}

На мой взгляд, это гораздо лучший способ точно контролировать, какие файлы и/или каталоги вы хотите опубликовать. Кроме того, к перечисленным npm автоматически добавит несколько файлов, которые в любом случае попадут в пакет, например, сам package.json, README.*, CHANGELOG.* и LICENSE.

Узнав об этом, я полностью перестал использовать .npmignore. 😁

Проверка безопасности ✔️

Вот дополнительный совет! Вы можете предварительно проверить, что будет опубликовано, если вы запустите npm publish, фактически не запуская его.

tar tvf $(npm pack)

Это создаст архив в корне вашего пакета. Распаковав его, вы увидите точное содержание того, что вы будете публиковать, что лично мне дает душевное спокойствие. 😌

Примечание. Этот последний совет я прочитал где-то в твите, но, к сожалению, не смог вспомнить, кто его опубликовал, и потом не смог найти исходный твит. Мои извинения и спасибо этому мудрому твиттеру!