Cli: [BUG] `npm pack` é concluído com sucesso mesmo se` main` não estiver presente no pacote

Criado em 15 mai. 2020  ·  3Comentários  ·  Fonte: npm/cli

O que? Por que

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

Quando npm pack e, portanto, quando npm publish são executados

Onde

Como

Comportamento Atual

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.

Passos para reproduzir

  • Crie um diretório vazio
  • 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"
}
  • Execute npm pack neste diretório e observe que o tarball foi criado com alegria
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

Não há index.js , então se este pacote alguma vez tentasse ser usado, ele não funcionaria.

Comportamento esperado

  • 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.

Who

Nossa empresa se deparou com isso ao tentar publicar em nosso registro interno.

Referências

  • n / D
Bug

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.

Todos 3 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações