Existe uma maneira de simplesmente desinstalar todas as dependências não utilizadas (não declaradas) de um projeto Node.js. (as que não estão mais definidas em minha package.json
.)
Existe uma maneira de simplesmente desinstalar todas as dependências não utilizadas (não declaradas) de um projeto Node.js. (as que não estão mais definidas em minha package.json
.)
Respostas:
Nota : As npm
versões recentes fazem isso automaticamente quando os bloqueios de pacotes estão ativados; portanto, isso não é necessário, exceto para remover os pacotes de desenvolvimento com o --production
sinalizador.
Execute npm prune
para remover os módulos não listados em package.json
.
De npm help prune
:
Este comando remove pacotes "estranhos". Se um nome de pacote for fornecido, apenas os pacotes correspondentes a um dos nomes fornecidos serão removidos.
Pacotes estranhos são aqueles que não estão listados na lista de dependências do pacote pai.
Se o
--production
sinalizador for especificado, este comando removerá os pacotes especificados em suas devDependencies.
package.json
. Isso está certo? Portanto, a próxima atualização ou instalação teria que reinstalá-los.
node_modules
diretório do módulo e , portanto, são removidas com o módulo.
package.json
, mas deixo o caramanchão. Quando corro npm prune
, espero que todo o karma, incluindo sua própria node_modules
pasta contendo suas dependências, seja removido. E as dependências do bower (bower-json, bower-logger, chmodr, fstream, glob, et al.). Tecnicamente, esses não estão listados no meu projeto package.json
. Os que foram removidos ou não?
node_modules
, mas por dentro node_modules/bower/node_modules
, "protegidos" por node_modules/bower/package.json
. As dependências do seu pacote e as dependências do seu pacote não são misturadas .
Se você não estiver preocupado com alguns minutos, uma solução seria rm -rf node_modules
e npm install
novamente para reconstruir os módulos locais.
node_modules
também verifica se o package.json
arquivo descreve um gráfico de dependência reproduzível. Remover e reinstalar o seu node_modules
é basicamente um teste de implantação.
npm prune
não ajudou nem um pouco, mas isso ajudou. Meu problema foi um link simbólico quebrado.
npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]
Este comando remove pacotes "estranhos". Se um nome de pacote for fornecido, apenas os pacotes correspondentes a um dos nomes fornecidos serão removidos.
Pacotes estranhos são aqueles que não estão listados na lista de dependências do pacote pai.
Se o --production sinalizador for especificado ou o NODE_ENV variável de ambiente é definida como a produção , este comando irá remover os pacotes especificados em suas devDependencies . A configuração --no-production negará que NODE_ENV seja definido como produção .
Se o sinalizador --dry-run for usado, nenhuma alteração será efetivamente feita.
Se o sinalizador --json for usado, as alterações que o npm remove (ou teria feito com --dry-run ) serão impressas como um objeto JSON.
Em operação normal com os bloqueios de pacotes ativados, os módulos externos são removidos automaticamente quando os módulos são instalados e você só precisará deste comando com o sinalizador --production .
Se você desabilitou os bloqueios de pacotes, os módulos externos não serão removidos e cabe a você executar a remoção do npm de tempos em tempos para removê-los.
npm dedupe
npm ddp
Pesquisa a árvore de pacotes local e tenta simplificar a estrutura geral movendo as dependências para mais adiante na árvore, onde elas podem ser compartilhadas com mais eficácia por vários pacotes dependentes.
Por exemplo, considere este gráfico de dependência:
a
+-- b <-- depends on c@1.0.x
| `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
`-- c@1.0.10
Nesse caso, o npm-dedupe transformará a árvore em:
a
+-- b
+-- d
`-- c@1.0.10
Devido à natureza hierárquica da pesquisa do módulo do nó, tanto b quanto d terão sua dependência atendida pelo único pacote c no nível raiz da árvore.
O algoritmo de deduplicação percorre a árvore, movendo cada dependência o mais alto possível na árvore, mesmo que duplicatas não sejam encontradas. Isso resultará em uma árvore plana e desduplicada.
node_modules
quando elas são removidas das respectivaspackage.json
?