Descobrimos isso quando um dos pacotes internos de nossa empresa fez alguma refatoração e moveu o ponto de entrada para outro lugar no repositório sem lembrar de atualizar o main
no package.json. O resultado final foi que npm pack
felizmente criado e permitiu que um pacote que não tinha chance de funcionar corretamente fosse publicado.
Quando npm pack
e, portanto, quando npm publish
são executados
npm pack
não valida se main
existe no tarball, o que torna mais fácil criar e publicar pacotes que não podem ser usados pelos consumidores.
npm init
e prossiga criando tudo com os valores padrão. Você receberá um package.json
como este{
"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
neste diretório e observe que o tarball foi criado com alegrianpm 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
Não há index.js
, então se este pacote alguma vez tentasse ser usado, ele não funcionaria.
npm pack
sairia com um código de saída diferente de zero, o que também faria com que npm publish
falhasse e evitasse os pacotes cujos tarballs não contivessem main
de package.json
sendo publicado em um registro.Nossa empresa se deparou com isso ao tentar publicar em nosso registro interno.
Não tenho certeza se isso é mais adequado como um bug para npm-packlist
. Não tenho certeza de como a organização npm
deseja manter a separação de interesses entre as duas. Ou seja, npm-packlist
apenas retornar cegamente uma lista de arquivos que devem tentar ser incluídos sem fazer nenhuma validação e deixar que a validação de ordem superior ocorra em qualquer pacote que queira consumir a funcionalidade de npm-packlist
?
Este não é o trabalho do npm-packlist, é npm publish
, se for o caso.
Isso parece razoável. Por algum motivo, minha empresa começou a usar npm pack
como um teste para ver se as publicações serão concluídas com êxito ou não. npm publish --dry-run
é provavelmente uma verificação melhor.
Comentários muito úteis
Isso parece razoável. Por algum motivo, minha empresa começou a usar
npm pack
como um teste para ver se as publicações serão concluídas com êxito ou não.npm publish --dry-run
é provavelmente uma verificação melhor.