Diff dépendances package.json
Comparez deux listes de dépendances de package.json et voyez ce qui a vraiment bougé : react passe de ^17.0.2 à ^18.2.0, axios arrive, moment part et lodash ne change pas. Mise en forme et ordre des clés sont ignorés. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Comparer les blocs de dépendances entre deux instantanés de package.json est une tâche quotidienne pour les revues de release, les mises à niveau et les audits de pull request. Un diff texte ou ligne mêle le bruit du formatage, de l'ordre des clés et de champs hors sujet au signal qui compte : quels paquets sont apparus, lesquels sont partis et quels intervalles de version ont bougé. Ce diff de dépendances package.json accepte deux objets simples — chacun une carte nom de paquet vers chaîne d'intervalle de version, exactement comme sous dependencies, devDependencies, peerDependencies ou optionalDependencies — et renvoie des listes structurées de paquets ajoutés, retirés et modifiés, plus les entrées inchangées et les compteurs.
Ce qu'un diff sémantique de dépendances signale
Un diff sémantique de dépendances traite chaque nom de paquet comme élément d'ensemble et chaque champ de version comme étiquette chaîne attachée à ce nom. Tout nom présent seulement dans after est signalé sous added avec son nouvel intervalle de version. Tout nom présent seulement dans before est signalé sous removed avec la version qu'il avait.
Les noms présents dans les deux cartes avec des chaînes de version inégales apparaissent sous changed avec les champs from et to. Les noms aux chaînes identiques apparaissent sous unchanged afin que vous puissiez inventorier la partie stable de la surface déclarée. Les compteurs de chaque seau et les totaux des deux cartes permettent aux tableaux de bord d'afficher des badges sans recompter les tableaux.
La comparaison est volontairement superficielle : elle n'étend pas les intervalles caret, ne résout pas le registre npm et n'évalue pas si ^17.0.0 et 17.0.2 installeraient le même arbre. Cela garde l'outil déterministe, hors ligne et adapté aux portes CI qui doivent seulement savoir si l'objet de dépendances déclaré a bougé. Collez dependencies, devDependencies ou une vue fusionnée que vous avez construite — le point d'entrée n'a besoin que de deux objets de spécifications de version en chaîne.
Où un diff de dépendances package.json justifie son coût
Les bots de pull request peuvent extraire les dépendances des fichiers package.json de base et de tête, appeler ce point d'entrée et publier un court commentaire listant uniquement les vrais mouvements de paquets au lieu d'un diff unifié bruyant. Les responsables de release figent un objet de dépendances de référence avant une vague de mises à niveau et relancent le diff après des lots Dependabot ou Renovate pour confirmer l'ensemble prévu de montées de version.
Les pipelines de revue de sécurité associent cette sortie structurée à des recherches d'avis : seule l'union des noms ajoutés et modifiés nécessite un scan CVE lorsque le reste de l'arbre est inchangé. Gardez des cartes modestes, figez les tableaux triés dans les tests, et vous obtenez des rapports reproductibles de changements de dépendances pour la CI, la revue de code et les listes de migration sans déployer un analyseur complet de lockfile.
Cas d’usage
Résumés de dépendances dans les pull requests
Comparez les objets de dépendances package.json de base et de tête et publiez sur la PR uniquement les paquets ajoutés, retirés ou dont la version a changé.
Revue des lots d'upgrade et Renovate
Comparez la carte de dépendances avant et après un lot d'upgrade automatique pour vérifier les montées prévues et repérer les retraits imprévus.
Listes de rescan de sécurité ciblées
Fournissez aux scanners d'avis les noms de paquets ajoutés et modifiés afin de ne pas revérifier à chaque commit les paquets inchangés.
Questions fréquentes
Cela résout-il les intervalles semver contre le registre ?
Non. Les spécifications de version sont comparées comme chaînes exactes. ^1.0.0 et 1.0.0 sont traités comme un changement même si les deux pouvaient installer le même release.
Puis-je envoyer devDependencies ou peerDependencies ?
Oui. Toute carte nom→version convient — dependencies, devDependencies, peerDependencies, optionalDependencies, ou un objet fusionné que vous construisez vous-même.
Pourquoi ne pas comparer les fichiers ligne par ligne ?
Un diff de lignes mêle le bruit de la mise en forme, de l'ordre des clés et d'autres sections à ce qui compte. Ici, chaque nom de paquet est comparé à son texte de version : vous ne voyez que les paquets arrivés, partis ou changés de version.
Les paquets inchangés apparaissent-ils aussi ?
Oui. Les paquets dont le texte de version est identique figurent dans leur propre liste, pour inventorier la partie stable. Toutes les listes sont triées par ordre alphabétique et accompagnées de leur nombre.
En quoi cela aide-t-il une revue de sécurité ?
Quand presque tout l'arbre reste identique, seuls les paquets ajoutés et ceux qui ont changé de version demandent une nouvelle vérification des alertes. Transmettez ces noms à votre scanner au lieu de recontrôler chaque paquet à chaque commit.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev/semantic-diff-package-json \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"before":{"react":"^17.0.2","lodash":"^4.17.21","moment":"^2.29.4"},"after":{"react":"^18.2.0","lodash":"^4.17.21","axios":"^1.6.0"}}'const res = await fetch("https://api.kit.forhosting.com/dev/semantic-diff-package-json", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"before": {
"react": "^17.0.2",
"lodash": "^4.17.21",
"moment": "^2.29.4"
},
"after": {
"react": "^18.2.0",
"lodash": "^4.17.21",
"axios": "^1.6.0"
}
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/semantic-diff-package-json",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"before": {
"react": "^17.0.2",
"lodash": "^4.17.21",
"moment": "^2.29.4"
},
"after": {
"react": "^18.2.0",
"lodash": "^4.17.21",
"axios": "^1.6.0"
}
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/semantic-diff-package-json", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"before":{"react":"^17.0.2","lodash":"^4.17.21","moment":"^2.29.4"},"after":{"react":"^18.2.0","lodash":"^4.17.21","axios":"^1.6.0"}}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"before":{"react":"^17.0.2","lodash":"^4.17.21","moment":"^2.29.4"},"after":{"react":"^18.2.0","lodash":"^4.17.21","axios":"^1.6.0"}}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/semantic-diff-package-json", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"before": {
"react": "^17.0.2",
"lodash": "^4.17.21",
"moment": "^2.29.4"
},
"after": {
"react": "^18.2.0",
"lodash": "^4.17.21",
"axios": "^1.6.0"
}
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.semantic_diff_package_json",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Les entrées non objet échouent avec invalid_input et ne sont pas facturées.
Ce qu'un diff sémantique de dépendances signale
La carte de référence est before ; la carte candidate est after.
Contrat d'entrée, forme de la réponse et erreurs
Chacun doit être un objet simple, ni un tableau, ni null, ni une primitive. Les noms de paquets deviennent des clés d'objet ; les intervalles de version doivent être des chaînes ou des scalaires simples qui se convertissent proprement en chaîne — les objets imbriqués comme valeur de version sont rejetés. Les objets vides sont valides et signifient un ensemble de dépendances vide. En cas de succès le corps inclut les tableaux added, removed, changed et unchanged triés alphabétiquement par nom de paquet ; chaque élément ajouté ou retiré a name et version, chaque modifié a name, from et to, et chaque inchangé a name et version. Envoyez un corps JSON avec deux champs objet obligatoires : before (alias left, old, previous) et after (alias right, new, next). Les compteurs numériques added_count, removed_count, changed_count, unchanged_count, total_before et total_after reflètent les tableaux. Le booléen has_changes vaut true lorsqu'un paquet a été ajouté, retiré ou a changé de version. Si before ou after est manquant, un tableau, une chaîne ou autrement pas un objet, la tâche échoue avec invalid_input en nommant le champ ; ces échecs ne consomment pas le solde. Exemple : before avec react ^17.0.2, lodash ^4.17.21, moment ^2.29.4 contre after avec react ^18.2.0, lodash ^4.17.21, axios ^1.6.0 donne moment retiré, axios ajouté, react changé de ^17.0.2 à ^18.2.0, et lodash inchangé.
Où un diff de dépendances package.json justifie son coût
Comme l'implémentation est pure parse de niveau A, chaque appel réussi coûte le prix de base publié $0.002 sans jetons de modèle ni réseau sortant.
Questions techniques
Comment comparer deux objets de dépendances package.json ?
Envoyez before et after comme objets simples associant des noms de paquet à des chaînes d'intervalle de version. L'API renvoie les listes triées added, removed, changed et unchanged plus les compteurs.
Que se passe-t-il si before ou after n'est pas un objet ?
La tâche échoue avec invalid_input. Les tableaux, null, chaînes et champs manquants sont rejetés et non facturés.
Combien coûte le diff de dépendances package.json ?
L'outil navigateur est gratuit. Les requêtes API utilisent le solde prépayé KIT à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.