Любой, кто опубликовал модуль npm, знает, насколько это болезненно.
Если вы не будете осторожны, вы часто окажетесь в аду переиздания. Кроме того, в зависимости от того, какой пакет pf вы публикуете, молитесь богам npm 🙏, чтобы вы не публиковали конфиденциальную информацию.
В любом случае, вот небольшой совет, который я узнал недавно. Я, наверное, очень, очень опаздываю на вечеринку, но, надеюсь, это будет кому-то полезно.
Задача с .npmignore
Раньше единственным способом, которым я знал, как ограничить то, что является npm publish
, было .npmignore
. Однако этот шаблон проблематичен/болезнен по нескольким причинам.
- Как это взаимодействует с
.gitignore
. По умолчанию npm не будет публиковать ничего, что в любом случае игнорируется Git, что удобно до тех пор, пока не появится хоть один элемент, отличающийся от того, что вы действительно хотите опубликовать. Вот где обычно появляется.npmignore
. Проблема в том, что добавление.npmignore
полностью заменяет правила соответствия.gitignore
— они не суммируются. Это приводит к тому, что приходится поддерживать два набора правил, что, по моему опыту, может (и, честно говоря, будет) не синхронизироваться и может привести к непреднамеренной публикации файлов, которые, как вы думали, вы исключили. - Возможно, большая проблема заключается в подходе «черного списка». Это может быть больше личным мнением, но в целом я гораздо лучше осведомлен о файлах, которые я хочу публиковать, чем о файлах, которые я не публикую, что усиливает мое ощущение
.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)
Это создаст архив в корне вашего пакета. Распаковав его, вы увидите точное содержание того, что вы будете публиковать, что лично мне дает душевное спокойствие. 😌
Примечание. Этот последний совет я прочитал где-то в твите, но, к сожалению, не смог вспомнить, кто его опубликовал, и потом не смог найти исходный твит. Мои извинения и спасибо этому мудрому твиттеру!