ASD

Dependency Upgrade

Gestiona actualizaciones de versiones mayores de dependencias con análisis de compatibilidad, despliegue escalonado y pruebas exhaustivas.

Estrellas
38.8k

en todo el repo

Actividad
34

0–100, la ruta de este skill

Actualizado
hace 5 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
1.9k tok

56 tok en reposo

Paquete
1 archivo

7 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add wshobson/agents --skill dependency-upgrade --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests.

Qué hace

  • Audita dependencias con npm/yarn y detecta versiones desactualizadas o vulnerables
  • Genera una matriz de compatibilidad entre versiones de paquetes
  • Propone una estrategia de actualización escalonada, paquete por paquete
  • Aplica codemods (jscodeshift) para automatizar cambios por breaking changes
  • Configura actualizaciones automáticas con Renovate o Dependabot

Úsalo cuando

  • Al subir versiones mayores de un framework
  • Al actualizar dependencias con vulnerabilidades de seguridad
  • Al modernizar dependencias legacy o resolver conflictos entre ellas
  • Al planear una ruta de actualización incremental o probar matrices de compatibilidad

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Ayúdame a planear la migración de React 16 a React 18
    • Necesito actualizar dependencias con vulnerabilidades detectadas por npm audit
    • Configura Renovate para automatizar actualizaciones menores

    SKILL.md

    En inglés

    Dependency Upgrade

    Master major dependency version upgrades, compatibility analysis, staged upgrade strategies, and comprehensive testing approaches.

    When to Use This Skill

    • Upgrading major framework versions
    • Updating security-vulnerable dependencies
    • Modernizing legacy dependencies
    • Resolving dependency conflicts
    • Planning incremental upgrade paths
    • Testing compatibility matrices
    • Automating dependency updates

    Semantic Versioning Review

    MAJOR.MINOR.PATCH (e.g., 2.3.1)
    
    MAJOR: Breaking changes
    MINOR: New features, backward compatible
    PATCH: Bug fixes, backward compatible
    
    ^2.3.1 = >=2.3.1 <3.0.0 (minor updates)
    ~2.3.1 = >=2.3.1 <2.4.0 (patch updates)
    2.3.1 = exact version
    

    Dependency Analysis

    Audit Dependencies

    # npm
    npm outdated
    npm audit
    npm audit fix
    
    # yarn
    yarn outdated
    yarn audit
    
    # Check for major updates
    npx npm-check-updates
    npx npm-check-updates -u  # Update package.json
    

    Analyze Dependency Tree

    # See why a package is installed
    npm ls package-name
    yarn why package-name
    
    # Find duplicate packages
    npm dedupe
    yarn dedupe
    
    # Visualize dependencies
    npx madge --image graph.png src/
    

    Compatibility Matrix

    // compatibility-matrix.js
    const compatibilityMatrix = {
      react: {
        "16.x": {
          "react-dom": "^16.0.0",
          "react-router-dom": "^5.0.0",
          "@testing-library/react": "^11.0.0",
        },
        "17.x": {
          "react-dom": "^17.0.0",
          "react-router-dom": "^5.0.0 || ^6.0.0",
          "@testing-library/react": "^12.0.0",
        },
        "18.x": {
          "react-dom": "^18.0.0",
          "react-router-dom": "^6.0.0",
          "@testing-library/react": "^13.0.0",
        },
      },
    };
    
    function checkCompatibility(packages) {
      // Validate package versions against matrix
    }
    

    Staged Upgrade Strategy

    Phase 1: Planning

    # 1. Identify current versions
    npm list --depth=0
    
    # 2. Check for breaking changes
    # Read CHANGELOG.md and MIGRATION.md
    
    # 3. Create upgrade plan
    echo "Upgrade order:
    1. TypeScript
    2. React
    3. React Router
    4. Testing libraries
    5. Build tools" > UPGRADE_PLAN.md
    

    Phase 2: Incremental Updates

    # Don't upgrade everything at once!
    
    # Step 1: Update TypeScript
    npm install typescript@latest
    
    # Test
    npm run test
    npm run build
    
    # Step 2: Update React (one major version at a time)
    npm install react@17 react-dom@17
    
    # Test again
    npm run test
    
    # Step 3: Continue with other packages
    npm install react-router-dom@6
    
    # And so on...
    

    Phase 3: Validation

    // tests/compatibility.test.js
    describe("Dependency Compatibility", () => {
      it("should have compatible React versions", () => {
        const reactVersion = require("react/package.json").version;
        const reactDomVersion = require("react-dom/package.json").version;
    
        expect(reactVersion).toBe(reactDomVersion);
      });
    
      it("should not have peer dependency warnings", () => {
        // Run npm ls and check for warnings
      });
    });
    

    Breaking Change Handling

    Identifying Breaking Changes

    # Check the changelog directly
    curl https://raw.githubusercontent.com/facebook/react/master/CHANGELOG.md
    

    Codemod for Automated Fixes

    # Run jscodeshift with transform URL
    npx jscodeshift -t <transform-url> <path>
    
    # Example: Rename unsafe lifecycle methods
    npx jscodeshift -t https://raw.githubusercontent.com/reactjs/react-codemod/master/transforms/rename-unsafe-lifecycles.js src/
    
    # For TypeScript files
    npx jscodeshift -t https://raw.githubusercontent.com/reactjs/react-codemod/master/transforms/rename-unsafe-lifecycles.js --parser=tsx src/
    
    # Dry run to preview changes
    npx jscodeshift -t https://raw.githubusercontent.com/reactjs/react-codemod/master/transforms/rename-unsafe-lifecycles.js --dry src/
    

    Custom Migration Script

    // migration-script.js
    const fs = require("fs");
    const glob = require("glob");
    
    glob("src/**/*.tsx", (err, files) => {
      files.forEach((file) => {
        let content = fs.readFileSync(file, "utf8");
    
        // Replace old API with new API
        content = content.replace(
          /componentWillMount/g,
          "UNSAFE_componentWillMount",
        );
    
        // Update imports
        content = content.replace(
          /import { Component } from 'react'/g,
          "import React, { Component } from 'react'",
        );
    
        fs.writeFileSync(file, content);
      });
    });
    

    Testing Strategy

    Unit Tests

    // Ensure tests pass before and after upgrade
    npm run test
    
    // Update test utilities if needed
    npm install @testing-library/react@latest
    

    Integration Tests

    // tests/integration/app.test.js
    describe("App Integration", () => {
      it("should render without crashing", () => {
        render(<App />);
      });
    
      it("should handle navigation", () => {
        const { getByText } = render(<App />);
        fireEvent.click(getByText("Navigate"));
        expect(screen.getByText("New Page")).toBeInTheDocument();
      });
    });
    

    Visual Regression Tests

    // visual-regression.test.js
    describe("Visual Regression", () => {
      it("should match snapshot", () => {
        const { container } = render(<App />);
        expect(container.firstChild).toMatchSnapshot();
      });
    });
    

    E2E Tests

    // cypress/e2e/app.cy.js
    describe("E2E Tests", () => {
      it("should complete user flow", () => {
        cy.visit("/");
        cy.get('[data-testid="login"]').click();
        cy.get('input[name="email"]').type("user@example.com");
        cy.get('button[type="submit"]').click();
        cy.url().should("include", "/dashboard");
      });
    });
    

    Automated Dependency Updates

    Renovate Configuration

    // renovate.json
    {
      "extends": ["config:base"],
      "packageRules": [
        {
          "matchUpdateTypes": ["minor", "patch"],
          "automerge": true
        },
        {
          "matchUpdateTypes": ["major"],
          "automerge": false,
          "labels": ["major-update"]
        }
      ],
      "schedule": ["before 3am on Monday"],
      "timezone": "America/New_York"
    }
    

    Dependabot Configuration

    # .github/dependabot.yml
    version: 2
    updates:
      - package-ecosystem: "npm"
        directory: "/"
        schedule:
          interval: "weekly"
        open-pull-requests-limit: 5
        reviewers:
          - "team-leads"
        commit-message:
          prefix: "chore"
          include: "scope"
    

    Rollback Plan

    // rollback.sh
    #!/bin/bash
    
    # Save current state
    git stash
    git checkout -b upgrade-branch
    
    # Attempt upgrade
    npm install package@latest
    
    # Run tests
    if npm run test; then
      echo "Upgrade successful"
      git add package.json package-lock.json
      git commit -m "chore: upgrade package"
    else
      echo "Upgrade failed, rolling back"
      git checkout main
      git branch -D upgrade-branch
      npm install  # Restore from package-lock.json
    fi
    

    Common Upgrade Patterns

    Lock File Management

    # npm
    npm install --package-lock-only  # Update lock file only
    npm ci  # Clean install from lock file
    
    # yarn
    yarn install --frozen-lockfile  # CI mode
    yarn upgrade-interactive  # Interactive upgrades
    

    Peer Dependency Resolution

    # npm 7+: strict peer dependencies
    npm install --legacy-peer-deps  # Ignore peer deps
    
    # npm 8+: override peer dependencies
    npm install --force
    

    Workspace Upgrades

    # Update all workspace packages
    npm install --workspaces
    
    # Update specific workspace
    npm install package@latest --workspace=packages/app
    

    Reproducido de wshobson/agents bajo licencia MIT. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere un gestor de paquetes como npm o yarn y, opcionalmente, herramientas como jscodeshift, Renovate o Dependabot.

    Necesita en el PATH:curlgitnpmnpxyarn

    Detalles

    Creador
    wshobson
    Licencia
    MIT
    Recursos incluidos
    Solo SKILL.md
    Repositorio
    wshobson/agents
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de wshobson/agents

    Este repo incluye 180 skills. Si instalas uno, normalmente ya tienes los demás.

    Úsalo al seleccionar y colocar iconos, imágenes, SVGs, diagramas o infografías de apoyo aprobados en un PPTX editable.

    Costo de contexto al activarse
    344 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción.

    Costo de contexto al activarse
    1.3k tok
    Tamaño del paquete
    10 archivos
    Última actualización
    el mes pasado
    herramientas desarrollo

    Úsalo al redactar o reparar una especificación JSON con coordenadas explícitas para un PPTX editable.

    Costo de contexto al activarse
    489 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para validar o reparar un PPTX editable en cuanto a geometría, accesibilidad, editabilidad nativa, linaje de fuente e integridad del paquete OOXML.

    Costo de contexto al activarse
    409 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para analizar un PPTX de referencia en modo solo lectura: estructura, tema, tipografía, ritmo de layout, diagnósticos, catálogos de plantillas derivados o inspección segura del paquete OOXML.

    Costo de contexto al activarse
    689 tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo al preparar la narrativa, las fuentes y el contexto de diseño para un nuevo deck PPTX editable.

    Costo de contexto al activarse
    415 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Skills relacionados

    Domina el sistema de tipos avanzado de TypeScript: generics, tipos condicionales, mapped types, template literals y utility types para aplicaciones type-safe.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    herramientas desarrollo

    Patrones de resiliencia en Python: reintentos automáticos, backoff exponencial, timeouts y decoradores tolerantes a fallos para servicios.

    Costo de contexto al activarse
    1.5k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    herramientas desarrollo

    Organización de proyectos Python, arquitectura de módulos y diseño de APIs públicas con __all__, para nuevos proyectos o reorganización de directorios.

    Costo de contexto al activarse
    1.7k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 6 meses
    herramientas desarrollo