Otimização do NPM no Processo de CI/CD
O NPM (Node Package Manager) é amplamente utilizado em aplicações JavaScript, mas em pipelines de CI/CD, o tempo gasto instalando dependências pode ser um gargalo. Este documento detalha práticas para otimizar o uso do NPM, com foco no contexto de automação em CI/CD.
1. Desabilitar Auditoria Automática
A auditoria de vulnerabilidades é útil em desenvolvimento, mas pode ser desnecessária no CI/CD, já que não influencia diretamente o build.
-
Para comandos específicos:
npm install --no-audit
-
Configuração global:
npm set audit false
2. Desabilitar a Verificação de Vulnerabilidades
A verificação de vulnerabilidades pode ser desativada para melhorar o desempenho:
- Instalar pacotes sem dependências opcionais:
npm install --omit=optional
3. Evitar Atualizações de Lockfile
Evite a reescrita do arquivo package-lock.json
durante a instalação:
-
No comando de instalação:
npm install --no-package-lock
-
No ambiente do CI: Certifique-se de que o
package-lock.json
esteja previamente commitado para evitar problemas de sincronização.
4. Utilizar npm ci
O comando npm ci
é mais rápido e confiável no CI/CD, pois usa o package-lock.json
para instalar exatamente as versões definidas.
- Exemplo de comando:
npm ci
Este comando ignora verificações de compatibilidade e resolve dependências mais rapidamente.
5. Ignorar Scripts Pós-Instalação
Desative scripts como postinstall
que podem ser desnecessários em ambientes de build:
-
Ignorar temporariamente:
npm install --ignore-scripts
-
Configurar globalmente:
npm set ignore-scripts true
Nota: Isso pode quebrar dependências que dependem de scripts pós-instalação.
6. Configurar o Cache do NPM
O uso eficiente do cache reduz downloads redundantes.
-
Definir um diretório de cache mais rápido (ex.: SSD):
npm config set cache /path/to/ssd/.npm-cache
-
Aumentar o tempo de vida do cache:
npm set cache-min 999999
7. Ajustar o Paralelismo
O NPM pode fazer downloads simultâneos, configurando mais conexões:
- Ajustar o número de sockets (threads):
npm set maxsockets 50
8. Desabilitar Mensagens de Financiamento
Para evitar mensagens de "funding" que aumentam o ruído nos logs:
- Configuração global:
npm set fund false
9. Usar Registries Alternativos
Caso o registro padrão do NPM seja lento, utilize um mirror confiável.
-
Definir registry alternativo:
npm set registry https://registry.npmmirror.com/
-
Voltar ao padrão:
npm set registry https://registry.npmjs.org/
10. Alternativa: PNPM ou Yarn
Considere usar gerenciadores de pacotes alternativos, como PNPM ou Yarn, que possuem desempenho superior em alguns casos:
-
Instalar PNPM:
npm install -g pnpm
-
Usar PNPM no lugar de NPM:
pnpm install
11. Integração no Pipeline de CI/CD
Adicione as otimizações nos scripts de pipeline:
Exemplo com GitHub Actions:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install Dependencies
run: |
npm ci --no-audit --omit=optional
Exemplo com GitLab CI/CD:
stages:
- install
install_dependencies:
stage: install
image: node:18
script:
- npm ci --no-audit --omit=optional
Conclusão
Estas otimizações ajudam a reduzir significativamente o tempo de execução de builds e instalação de pacotes no CI/CD. Elas garantem um pipeline mais eficiente, sem comprometer a integridade do processo.