Otimização do NPM no Processo de CI/CD

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.

Você achou esse artigo útil?