AgentSkillsCN

dependency-check

当新增或建议引入新依赖时,自动进行评估:是否确有必要?是否存在更原生、更轻量的替代方案?考量其体积、维护难度及安全性。

SKILL.md
--- frontmatter
name: dependency-check
description: "Évaluation automatique quand une nouvelle dépendance est ajoutée ou suggérée. Force la réflexion : est-ce nécessaire ? Alternative native ou plus légère ? Taille, maintenance, sécurité."

Dependency Check — Évaluation avant ajout

Ce skill s'active quand une nouvelle dépendance est sur le point d'être ajoutée au projet.

Questions obligatoires

Avant d'ajouter une dépendance, répondre à :

  1. C'est nécessaire ? — Le langage/framework ne fournit-il pas déjà cette fonctionnalité nativement ?
  2. Une seule utilisation ? — Si on l'utilise à un seul endroit, 10-20 lignes de code maison suffisent-elles ?
  3. Alternative plus légère ? — Existe-t-il un package plus petit qui fait le strict nécessaire ?
  4. Activement maintenu ? — Dernière release, issues ouvertes, nombre de contributeurs
  5. Impact sur le bundle ? — Taille, tree-shaking possible ?

Ordre de préférence

code
1. Natif (stdlib, API du langage/framework)
   ↓ pas disponible
2. Dépendance établie (>10k stars, maintenance active, écosystème large)
   ↓ trop lourde
3. Dépendance légère (focalisée, peu de sous-dépendances)
   ↓ pas trouvée
4. Code custom (documenté, testé)

Signaux d'alerte

SignalRisque
Pas de release depuis >1 anAbandon potentiel
Beaucoup d'issues ouvertes sans réponseMaintenance faible
Trop de sous-dépendancesSurface d'attaque large
Pas de types TypeScriptIntégration difficile
Licence restrictive (GPL dans un projet MIT)Incompatibilité
Package qui fait "tout"Over-engineering importé

Exemples courants

Souvent inutile

On ajoute...Alors que...
lodash (entier)lodash/get ou natif (?., .flat(), .map()) suffit
momentIntl.DateTimeFormat ou date-fns (tree-shakable)
axiosfetch natif suffit dans la plupart des cas
uuidcrypto.randomUUID() est natif
left-padC'est une ligne de code
is-oddn % 2 !== 0

Souvent justifié

DépendancePourquoi
zod / joiValidation de schemas — complexe à réimplémenter correctement
bcrypt / argon2Crypto — ne JAMAIS réimplémenter soi-même
ORM (prisma, drizzle)Requêtes typées, migrations, sécurité SQL
Framework de test (vitest, jest)Infrastructure de test complète

Par écosystème

npm (JavaScript / TypeScript)

Souvent évitableAlternative native ou légère
lodashNatif ES2024+ (.structuredClone(), ?., Object.groupBy())
moment / dayjsIntl.DateTimeFormat, Temporal (stage 3)
axiosfetch (natif Node 18+, navigateurs)
uuidcrypto.randomUUID()
dotenv--env-file (Node 20+)
node-fetchfetch natif (Node 18+)
chalkutil.styleText() (Node 21+)

pip (Python)

Souvent évitableAlternative
requests (pour du simple)urllib.request (stdlib) ou httpx (async)
python-dotenvos.environ + .env dans le runner
arrowdatetime (stdlib)
sixPython 3 natif

composer (PHP)

Souvent évitableAlternative
guzzlehttp/guzzle (simple)file_get_contents + stream_context ou curl
nesbot/carbon (basique)DateTimeImmutable natif
illuminate/support (hors Laravel)Fonctions natives PHP 8+
ramsey/uuidrandom_bytes() + format UUID

Comportement

  • Signaler quand une dep semble évitable — proposer l'alternative
  • Ne pas bloquer si l'utilisateur a fait son choix consciemment
  • Vérifier la compatibilité de licence avec le projet
  • Si ajout justifié → s'assurer que la dep est dans CLAUDE.md section "Dépendances clés"