03 / Exemple sur un paquet réel / 7 min de lecture
slugify : pourquoi mon URL contient-elle encore « ! » ?
« Déjà Vu! » devient « deja-vu! », alors que vous vouliez « deja-vu ». Inspectez le paquet JavaScript avec REA, trouvez le réglage de ponctuation et vérifiez le résultat.
Sur cette page
LA RÉPONSE COURTE
lower: true convertit seulement les majuscules en minuscules. Ajoutez strict: true pour supprimer aussi la ponctuation. C’est une option à activer, pas un bogue de la bibliothèque.
slugify("Déjà Vu!", { lower: true, strict: true })
// → "deja-vu"01. L’URL souhaitée
Un slug est la partie finale lisible d’une URL, comme deja-vu dans example.com/posts/deja-vu. Cet exemple utilise la véritable version npm slugify 1.6.6. Les résultats ci-dessous proviennent de l’exécution locale de cette version.
Essayez le titre ci-dessous. Activez ensuite Supprimer la ponctuation pour voir la différence.
Encore un « ! » ? Activez Supprimer la ponctuation.
{ lower: true, strict: false }S’exécute dans votre navigateur. Rien n’est envoyé. REA intervient dans le tutoriel écrit.
Voici la même comparaison en JavaScript :
slugify("Déjà Vu!")
// → "Deja-Vu!"
slugify("Déjà Vu!", { lower: true })
// → "deja-vu!"L’accent a disparu ; le point d’exclamation est resté. Nous avons utilisé REA pour localiser le fichier principal du paquet, lire le filtre et déterminer quelle option le supprime. Vous pouvez reproduire ces étapes ci-dessous.
02. Téléchargez le paquet et inspectez-le avec REA
Nous avons téléchargé l’archive npm de la version fixée et l’avons extraite sans installer ni exécuter le paquet. Les commandes de préparation suivantes fonctionnent dans un shell disposant de tar:
mkdir rea-slugify-case
cd rea-slugify-case
npm pack [email protected]
tar -xzf slugify-1.6.6.tgzNous avons ensuite lancé l’analyseur d’applications JavaScript de REA sur le répertoire extrait package :
Si vous préférez votre agent de programmation, remplacez le chemin et collez cette consigne :
Utilise REA pour inspecter /absolute/path/to/rea-slugify-case/package. J’utilise slugify pour créer les URL de mes articles. Pourquoi slugify('Déjà Vu!', { lower: true }) conserve-t-il le point d’exclamation ? Trouve le fichier d’entrée, montre le code qui l’autorise et identifie l’option qui le supprime. Ne modifie pas le paquet.Ou recueillez directement l’analyse dans votre terminal :
npx -y [email protected] analyze-javascript-application ./package --json > analysis.jsonREA a identifié le paquet comme slugify, version 1.6.6, avec pour point d’entrée ./slugify.js. Le rapport a relevé trois fichiers pertinents et aucune erreur d’analyse syntaxique. Il indique aussi que la couverture globale du graphe est partielle, ce que nous avons conservé dans le résumé publié.
Cette distribution JavaScript est lisible. REA a fourni l’inventaire des fichiers et le contexte d’analyse ; l’inspection du code et les vérifications directes qui ont suivi ont établi le comportement. Aucune décompilation native n’a été nécessaire.
03. Trouvez l’option qui supprime la ponctuation
Dans le fichier livré slugify.js, les lignes 33–42 normalisent la chaîne, appliquent les substitutions de langue ou de caractères et filtrent les caractères. Le filtre par défaut autorise explicitement le point d’exclamation.
// remove not allowed characters
.replace(options.remove || /[^\w\s$*_+~.()'"!\-:@]+/g, '')
}, '');
if (options.strict) {
slug = slug.replace(/[^A-Za-z0-9\s]/g, '');
}La branche strict intervient ensuite et retire tout ce qui n’est ni lettre, ni chiffre, ni espace. Le passage en minuscules est une opération distincte aux lignes 57–58. Nous pouvons donc formuler une prédiction vérifiable :
slugify("Déjà Vu!", { lower: true, strict: true })
// should return "deja-vu"Le même fichier explique aussi pourquoi les espaces se regroupent en un séparateur, pourquoi & devient and, et pourquoi le paramètre de langue allemand transforme Ä en AE.
04. Exécutez les vérifications sur le vrai paquet
Nous avons exécuté huit assertions sur la version 1.6.6 non modifiée, couvrant la question initiale et quelques comportements voisins.
Paquet d’origine · Node.js 22.23.1 · macOS arm64
| Entrée | Options | Résultat observé |
|---|---|---|
| Déjà Vu! | Par défaut | Deja-Vu! |
| Déjà Vu! | lower | deja-vu! |
| Déjà Vu! | lower + strict | deja-vu |
| hello world (avec espaces autour) | Par défaut | hello-world |
| Rock & Roll | Par défaut | Rock-and-Roll |
| Äpfel | Langue allemande + lower | aepfel |
| Chaîne vide | Par défaut | Chaîne vide |
| 42 (un nombre) | Par défaut | Lève l’erreur « string argument expected » |
Lire les résultats enregistrés, ou utilisez la démonstration interactive ci-dessus. Elle exécute le même paquet, dans sa version fixée, dans votre navigateur.
05. Ce que nous avons testé
Pour cette version et ces entrées, le code et les sorties observées concordent. Si vous voulez deja-vu, utilisez à la fois lower: true et strict: true.
Le périmètre compte. Huit vérifications ne couvrent pas tous les comportements Unicode ou linguistiques. Le graphe REA est partiel ; une relation absente du graphe n’est pas une preuve de son inexistence. Nous n’avons ni reconstruit un binaire natif ni récupéré un code source indisponible.
Puisque le code livré est lisible, son inspection directe est aussi une démarche valable. Ce cas illustre une méthode complète : identifier l’artefact, examiner une règle, puis vérifier l’hypothèse avec l’implémentation d’origine.
06. Téléchargez et exécutez cet exemple
Téléchargez le petit kit de reproduction. Il contient la dépendance dans sa version fixée, les huit assertions et les étapes permettant de recueillir vos propres éléments d’analyse avec REA.
Télécharger le kit de reproduction
npm install --ignore-scripts
node verify.mjsLe programme de vérification affiche chaque résultat et se termine en erreur si une assertion échoue. Node.js n’exécute le paquet npm qu’à cette étape ; l’inspection statique précédente avec REA ne l’exécute pas.
Essayez un autre tutorielTrouvez où une application enregistre les fichiers exportés.Éléments vérifiables : Résumé de l’analyse REA · résultats des vérifications · code inspecté · licence MIT. Paquet de simov et des contributeurs. Analyse et vérifications d’exécution réalisées localement le 12 octobre 2026. Les résumés publics omettent les chemins locaux.
Vous découvrez l’outil ? Qu’est-ce que REA ? · Comment nous vérifions nos guides