03 / Ejemplo con un paquete real / 7 min de lectura
slugify: ¿por qué sigue «!» en mi URL?
«Déjà Vu!» se convierte en «deja-vu!», pero querías «deja-vu». Usa REA para inspeccionar el paquete JavaScript, encontrar el ajuste que controla la puntuación y comprobar el resultado.
En esta página
LA RESPUESTA BREVE
lower: true solo convierte las mayúsculas en minúsculas. Añade strict: true para eliminar también la puntuación. Es una opción que debes activar, no un error de la biblioteca.
slugify("Déjà Vu!", { lower: true, strict: true })
// → "deja-vu"01. La URL que queríamos
Un slug es la última parte legible de una URL, como deja-vu en example.com/posts/deja-vu. Este ejemplo utiliza la versión real de slugify 1.6.6 publicada en npm. Los resultados siguientes proceden de ejecutar esa versión localmente.
Prueba el título de abajo. Después activa Eliminar puntuación para ver la diferencia.
¿Todavía aparece «!»? Activa Eliminar puntuación.
{ lower: true, strict: false }Se ejecuta en tu navegador. No se sube nada. REA se utiliza en la guía escrita.
Esta es la misma comparación en JavaScript:
slugify("Déjà Vu!")
// → "Deja-Vu!"
slugify("Déjà Vu!", { lower: true })
// → "deja-vu!"Desapareció el acento; quedó el signo de exclamación. Usamos REA para localizar el archivo principal del paquete, leer el código de filtrado y comprobar qué opción lo elimina. Puedes repetir los pasos siguientes.
02. Descargar el paquete e inspeccionarlo con REA
Descargamos el archivo tar de npm de la versión fijada y lo descomprimimos sin instalar ni ejecutar el paquete. Los siguientes comandos de preparación funcionan en una shell con tar:
mkdir rea-slugify-case
cd rea-slugify-case
npm pack slugify@1.6.6
tar -xzf slugify-1.6.6.tgzDespués ejecutamos el analizador de aplicaciones JavaScript de REA sobre el directorio package extraído:
Si prefieres usar tu agente de programación, sustituye la ruta y pega esta instrucción:
Usa REA para inspeccionar /absolute/path/to/rea-slugify-case/package. Uso slugify para crear las URL de artículos. ¿Por qué slugify('Déjà Vu!', { lower: true }) conserva el signo de exclamación? Encuentra el archivo de entrada, muestra el código que lo permite e identifica la opción que lo elimina. No modifiques el paquete.O recoge el análisis directamente en tu terminal:
npx -y rea-agents@6.4.0 analyze-javascript-application ./package --json > analysis.jsonREA identificó el paquete como slugify, versión 1.6.6, con el punto de entrada ./slugify.js. El informe registró tres archivos relevantes y ningún fallo de análisis sintáctico. También marcó la cobertura general del grafo como parcial, dato que conservamos en el resumen publicado.
Esta distribución JavaScript es legible. REA proporcionó el inventario de artefactos y el contexto del análisis; la inspección posterior del código y las comprobaciones directas establecieron el comportamiento. No hubo descompilación nativa.
03. Encontrar la opción que elimina la puntuación
En el archivo distribuido slugify.js, las líneas 33–42 normalizan la cadena, aplican sustituciones según la configuración regional o el mapa de caracteres y filtran caracteres. El filtro predeterminado permite explícitamente el signo de exclamación.
// remove not allowed characters
.replace(options.remove || /[^\w\s$*_+~.()'"!\-:@]+/g, '')
}, '');
if (options.strict) {
slug = slug.replace(/[^A-Za-z0-9\s]/g, '');
}La rama strict se ejecuta después y elimina los caracteres que no son letras, números ni espacios en blanco. La conversión a minúsculas es una operación separada en las líneas 57–58. Esto nos da una predicción comprobable:
slugify("Déjà Vu!", { lower: true, strict: true })
// should return "deja-vu"El mismo archivo también explica por qué los espacios se agrupan en un solo separador, por qué & se convierte en and, y por qué la configuración regional alemana transforma Ä en AE.
04. Ejecutar las comprobaciones sobre el paquete real
Ejecutamos ocho aserciones sobre la versión 1.6.6 sin modificar, incluida la pregunta original y algunos comportamientos relacionados.
Paquete original · Node.js 22.23.1 · macOS arm64
| Entrada | Opciones | Resultado observado |
|---|---|---|
| Déjà Vu! | Predeterminado | Deja-Vu! |
| Déjà Vu! | lower | deja-vu! |
| Déjà Vu! | lower + strict | deja-vu |
| hello world (con espacios alrededor) | Predeterminado | hello-world |
| Rock & Roll | Predeterminado | Rock-and-Roll |
| Äpfel | Configuración regional alemana + lower | aepfel |
| Cadena vacía | Predeterminado | Cadena vacía |
| 42 (un número) | Predeterminado | Lanza «string argument expected» |
Consulta los resultados registrados de las comprobaciones, o usa la demostración interactiva del paquete de arriba. La demostración ejecuta el mismo paquete con versión fijada en tu navegador.
05. Qué probamos
Para esta versión y estas entradas, el código y las salidas observadas coinciden. Si quieres deja-vu, usa tanto lower: true como strict: true.
El alcance importa. Ocho comprobaciones no establecen todos los comportamientos de Unicode ni de configuración regional. El grafo de REA es parcial; que falte una relación en él no demuestra su inexistencia. No reconstruimos un binario nativo ni recuperamos código fuente inaccesible.
Como el código distribuido es legible, la inspección habitual del código también es válida. Este caso demuestra el hábito completo: identificar el artefacto, inspeccionar una regla y comprobar después la afirmación frente a la implementación original.
06. Descargar y ejecutar este ejemplo
Descarga el pequeño kit de reproducción. Incluye la dependencia con versión fijada, las ocho aserciones y los pasos para recopilar tus propias pruebas con REA.
Descargar el kit de reproducción
npm install --ignore-scripts
node verify.mjsEl ejecutor de aserciones imprime cada resultado y termina con error si una comprobación falla. Node.js ejecuta el paquete npm solo en esta fase de verificación; la inspección estática anterior de REA no lo ejecuta.
Probar otro tutorialDescubrir dónde guarda una aplicación los archivos exportados.Pruebas: Resumen del análisis de REA · resultados de las comprobaciones · código inspeccionado · licencia MIT. Paquete de simov y colaboradores. Análisis y comprobaciones de ejecución realizados localmente el 12 de octubre de 2026. Los resúmenes públicos omiten las rutas del sistema de archivos local.
¿Acabas de conocer la herramienta? ¿Qué es REA? · Cómo revisamos nuestras guías