Мы обнаружили это, когда один из внутренних пакетов нашей компании провел некоторый рефакторинг и переместил точку входа в другое место в репозитории, не забыв обновить main
в package.json. Конечным результатом было то, что npm pack
успешно создан и позволил опубликовать пакет, у которого не было шансов на правильную работу.
Когда npm pack
и, следовательно, когда npm publish
выполняются
npm pack
не проверяет наличие main
в архиве, что упрощает создание и публикацию пакетов, которые не могут быть использованы потребителями.
npm init
и шаг за шагом создайте все со значениями по умолчанию. Вы получите package.json
вот так{
"name": "npm-repro",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
npm pack
в этом каталоге и убедитесь, что tarball успешно создан.npm notice
npm notice 📦 [email protected]
npm notice === Tarball Contents ===
npm notice 205B package.json
npm notice === Tarball Details ===
npm notice name: npm-repro
npm notice version: 1.0.0
npm notice filename: npm-repro-1.0.0.tgz
npm notice package size: 241 B
npm notice unpacked size: 205 B
npm notice shasum: ca39bc17447e27ef2fd0dea656e0e6b473f310d7
npm notice integrity: sha512-p8tZD8W438r7t[...]7Oo0YMcAoNPzQ==
npm notice total files: 1
npm notice
npm-repro-1.0.0.tgz
Не существует index.js
, поэтому, если этот пакет когда-либо попытается использовать, он не сработает.
npm pack
завершится с ненулевым кодом выхода, что также приведет к сбою npm publish
и предотвращению пакетов, чьи архивы не содержат main
из package.json
от публикации в реестре.Наша компания столкнулась с этим при попытке публикации в нашем внутреннем реестре.
Я не уверен, что это лучше подходит как ошибка для npm-packlist
. Я не совсем уверен, как организация npm
хочет сохранить разделение интересов между ними. Т.е. должен npm-packlist
просто вслепую вернуть список файлов, которые следует попытаться включить без какой-либо проверки, и оставить проверку более высокого порядка в любых пакетах, которые хотят использовать функциональность npm-packlist
?
Это не работа npm-packlist, это работа npm publish
всяком случае.
Звучит разумно. По какой-то причине моя компания стала использовать npm pack
для проверки успешности публикации. npm publish --dry-run
, вероятно, лучший чек.
Самый полезный комментарий
Звучит разумно. По какой-то причине моя компания стала использовать
npm pack
для проверки успешности публикации.npm publish --dry-run
, вероятно, лучший чек.