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.
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.
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;)
... 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
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.
npm install yourlibrary
, por exemplo.travis.yml
e.jshintrc
.npmignore
ou"files"
( docs.npmjs.com/files/package.json#files ).Respostas:
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
é ignoradonpm
por padrão se.npmignore
nã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
.coffee
arquivos em seu pacote, mas mantê-los em seu repositório git.Construir sobras de arquivo
node-gyp
podem ter arquivos de objeto que são gerados durante uma construção que nunca deveriam ir para o pacote..gitignore
mesmo. Você deve colocar essas coisas aqui dentro se já estiver usando um.npmignore
arquivo, visto que ele se sobrepõe.gitignore
do ponto de vista do npm.Testes
Configurações de integração contínua / arquivos Meta
.travis.yml
não são necessárias para usar, testar ou visualizar o código.Documentos não readme e exemplos de código
Objetos de páginas do Github
CNAME
arquivos ou espaços reservadosindex.html
se usar seu módulo também serve comogh-pages
repositório.bower.json e amigos
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.
fonte
Eu concordo com a resposta curta e sintética de lante e a grande resposta de SamT :
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:
Acho que é mais simples, à prova de futuro e tem uma semântica melhor;)
fonte
npm test
em todos os node_modules pode lhe dar uma dica se algo funciona diferente em um determinado ambiente..npmignore
.files: ["lib", "!lib/**/*.test.js"]
. :)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.yml
ou com seus.jshintrc
arquivos, 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ápidofonte
.npmignore
nã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.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?
fonte