Devo ignorar meus testes?

91

O que exatamente devo colocar .npmignore?

Testes? Coisas como .travis.yml, .jshintrc? Algo que não seja necessário ao executar o módulo (exceto o leiame)?

Não consigo encontrar nenhuma orientação sobre isso.

callum
fonte
4
deve ignorar tudo o que não é necessário quando alguém liga npm install yourlibrary, por exemplo .travis.ymle.jshintrc
lante
realmente? mesmo um leia-me? isso é recomendado oficialmente em qualquer lugar?
callum
2
README é incluído automaticamente independentemente de .npmignoreou "files"( docs.npmjs.com/files/package.json#files ).
Nicolás Fantone

Respostas:

86

Como você provavelmente descobriu, o NPM realmente não declara especificamente o que deve ser inserido ali, em vez disso, eles têm uma lista de arquivos ignorados por padrão . Muitas pessoas nem mesmo usam, já que tudo em seu .gitignoreé ignorado npmpor padrão se .npmignorenão existir. Além disso, muitos arquivos já são ignorados por padrão, independentemente das configurações, e alguns arquivos são sempre excluídos para não serem ignorados, conforme descrito no link acima.

Não há muito oficial sobre o que sempre deve estar lá porque é basicamente um subconjunto de .gitignore, mas pelo que eu percebi usando o nó por 5 anos, aqui está o que eu vim.

Nota: Por produção, quero dizer qualquer momento em que seu módulo seja usado por alguém e não para desenvolver o próprio módulo.


Pré-lançamento de fontes compiladas cruzadas

  • Prós : se você estiver usando uma linguagem que faz compilação cruzada em JavaScript, pode pré-compilar antes do lançamento e não incluir .coffeearquivos em seu pacote, mas mantê-los em seu repositório git.

Construir sobras de arquivo

  • Prós : Pessoas que usam coisas como node-gyppodem ter arquivos de objeto que são gerados durante uma construção que nunca deveriam ir para o pacote.
  • Contras : isso sempre deve entrar no .gitignoremesmo. Você deve colocar essas coisas aqui dentro se já estiver usando um .npmignorearquivo, visto que ele se sobrepõe .gitignoredo ponto de vista do npm.

Testes

  • Prós : menos bagagem em seu código de produção.
  • Contras : você não pode executar testes em ambientes ativos na pequena chance de haver uma falha específica do sistema, como uma versão desatualizada do nó em execução que causa a falha de um teste.

Configurações de integração contínua / arquivos Meta

  • Prós : Mais uma vez, menos bagagem. Coisas como .travis.ymlnão são necessárias para usar, testar ou visualizar o código.

Documentos não readme e exemplos de código

  • Prós : menos bagagem. Algumas pessoas existem na escola de pensamento em que se você não puder expressar pelo menos uma funcionalidade viável mínima em seu Leiame, seu módulo é muito grande.
  • Contras : as pessoas não podem ver a documentação completa e exemplos de código em seu próprio sistema de arquivos. Eles teriam que visitar o repositório (que também requer uma conexão com a Internet).

Objetos de páginas do Github

  • Prós : você certamente não precisa encher seus lançamentos com CNAMEarquivos ou espaços reservados index.htmlse usar seu módulo também serve como gh-pagesrepositório.

bower.json e amigos

  • Prós : Se você decidir construir suas dependências antes do lançamento, você não precisa que o usuário final instale o bower e instale mais coisas com ele. Eu, pessoalmente, manteria essas coisas no pacote. Quando faço um npm install, devo confiar apenas no npm e em nenhuma outra fonte externa.

Basicamente, você deve sempre usá-lo se houver algo que deseja manter fora do pacote npm, mas não fora do repositório npm. Não é uma longa lista de itens, mas o npm prefere incorporar a funcionalidade do que ter pessoas presas a objetos irrelevantes em seus pacotes.

SamT
fonte
Não existe uma maneira de remover scripts não utilizáveis ​​do arquivo package.json. Por exemplo, testando scripts? Sinto-me um pouco confuso para remover tudo, mas manter os scripts no arquivo ...
inf3rno
Não, não há. Você pode omiti-los do package.json, pois é principalmente para NPM de qualquer maneira e se você estiver apenas executando testes, você pode acessá-los por meio do comando original para executá-los.
SamT
63

Eu concordo com a resposta curta e sintética de lante e a grande resposta de SamT :

  • Você não deve incluir seus testes em seu pacote.
  • Seu pacote deve conter apenas arquivos de tempo de execução de produção.
  • Isso tornará seu pacote mais simples e rápido de ser baixado.

Minha contribuição para essas respostas:

.npmignore é a forma de lista negra de selecionar o arquivo do pacote. Mas de uma forma mais prática, você pode colocar na lista de permissões os arquivos que precisa incluir no seu pacote usando o campo de arquivos em seu package.json:

{
  "files": [
    "lib/",
    "index.js"
  ]
}

Acho que é mais simples, à prova de futuro e tem uma semântica melhor;)

Yves M.
fonte
3
... para não falar de mais fácil de lembrar e menos sujeito a acidentes de usar (se você for tão esquecido quanto eu posso ser). Obrigado pela dica, isso é ótimo.
Connor
2
Eu gosto dessa abordagem.
Brady Holt
2
Acho que você pode até omitir o "index.js" presumindo que seja o arquivo 'principal' em seu package.json :)
Ben George
Ignorar imagens e documentos desnecessários é bom. Mas ignorar os testes provavelmente não é uma boa ideia. Baixar alguns KBs extras não leva muito tempo e fazer um recursivo npm testem todos os node_modules pode lhe dar uma dica se algo funciona diferente em um determinado ambiente.
adelriosantiago
3
@ NicolásFantone A propriedade files também aceita o padrão glob . Portanto, podemos ignorar os arquivos de teste sem criar .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj
15

Só para esclarecer, sempre que alguém fizer isso npm install your-library, o npm baixará todos os arquivos de origem que o repo inclui, exceto os arquivos que você incluir no seu .npmignore.

Saiba que as pessoas que estão instalando sua biblioteca precisarão apenas da sua execução, nada mais será necessário.

Por exemplo, quando alguém instala uma biblioteca, é provável que ele / ela não se importe com você .travis.ymlou com seus .jshintrcarquivos, ou mesmo com algumas imagens, arquivos Grunt, documentação, etc.

.npmignore pode permitir que seu pacote npm tenha menos arquivos e faça download mais rápido

lante
fonte
1
O sentimento aqui é bom, mas para esclarecer: .npmignorenão afeta diretamente o que é baixado , afeta o que entra em seu pacote quando você publica e faz upload npm . Isso indiretamente cria arquivos menores para download.
Mark Stosberg
2

Não inclua seus testes. Freqüentemente, os testes têm cerca de 5x o tamanho da base de código real. Contanto que seus testes estejam no Github, etc, isso é bom o suficiente.

Mas o que você absolutamente deve fazer é testar seu pacote NPM em seu formato publicado . Crie alguns testes de fumaça que residem na base de código real, mas não fazem parte do conjunto de testes.

Você pode ler sobre como testar seu pacote depois de colocá-lo em tarball, aqui: https://github.com/ORESoftware/r2g

Como testar um resultado `npm publish`, sem realmente publicar no NPM?

Alexander Mills
fonte