- El comportamiento predeterminado de
npm installcambia a un enfoque centrado en la seguridad, por lo que funciones que hasta ahora se ejecutaban automáticamente ahora pasarán a funcionar solo si el usuario las permite explícitamente (opt-in) allowScriptsdesactivado por defecto — los scriptspreinstall·install·postinstallincluidos en paquetes externos instalados se bloquearán por defecto, y solo se ejecutarán los paquetes permitidos por el proyecto- Se cambia para bloquear scripts que se ejecutaban automáticamente con solo instalar un paquete, reduciendo así la posibilidad de que se cuele código malicioso
- Las compilaciones nativas con
node-gyptambién quedan bloqueadas, por lo que incluso paquetes que solo tienenbinding.gypy no un script de instalación separado dejarán de compilarse (porque npm ejecuta internamentenode-gyp rebuild) - El script
preparede paquetes traídos por git·file·link también se bloqueará de la misma manera - Uso: revisar qué paquetes tienen scripts con
npm approve-scripts --allow-scripts-pending→ permitir solo los confiables connpm approve-scriptsy bloquear el resto connpm deny-scripts→ como la lista de permitidos se guarda enpackage.json, debe hacerse commit
--allow-gitcon valor predeterminadonone— los paquetes traídos directamente desde repositorios Git (incluyendo sus dependencias transitivas) se bloquearán por defecto, y solo se instalarán si se permite con--allow-git- Esto bloquea la vía por la que
.npmrcdentro de un paquete Git podía sustituir el ejecutable de Git en sí (--ignore-scriptsno evitaba este problema) (npm 11.10.0+)
- Esto bloquea la vía por la que
--allow-remotecon valor predeterminadonone— los paquetes obtenidos desde URLs remotas como tarballs por https (incluyendo dependencias transitivas) se bloquearán por defecto, y solo se instalarán si se permite con--allow-remote(npm 11.15.0+)- Sin embargo, los valores predeterminados de
--allow-filey--allow-directoryno cambian en esta v12
- Sin embargo, los valores predeterminados de
- Todos estos cambios se ofrecerán primero como advertencias en npm 11.16.0 o superior, para que sea posible revisarlos y prepararse antes del lanzamiento oficial
- El lanzamiento estimado de v12 es en julio de 2026
1 comentarios
Comentarios de Hacker News
No sé cómo se me pasó que npm fue adquirido por GitHub, pero de repente muchas cosas empiezan a tener sentido
Cuesta pensar en un peor hogar para una parte tan importante del ecosistema de Node
https://github.blog/news-insights/company-news/npm-is-joinin...
Es “adoptar, extender y extinguir”
https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguis...
Los scripts de postinstall debieron eliminarse hace mucho tiempo; son como un cáncer en los paquetes de NPM
Hay demasiados
postinstallprofundos, anidados y sin control ejecutándose aleatoriamente cuando traes cualquier cosaNo sé quién pensó en algún momento que esto era una buena idea
Normalmente igual vas a ejecutar en algún momento el código de dependencias empaquetado, y por lo general con los mismos permisos que en el proceso de instalación
Entonces esos scripts de configuración, para bien o para mal, solo moverían el punto de entrada desde npm al lugar donde ocurra un
importorequireA menos que todo el ecosistema se mueva a un entorno sandbox tipo Deno, como mucho esto parece un pequeño obstáculo. Aunque quizás ese sea el plan
El ejemplo que se me viene de inmediato es https://www.npmjs.com/package/patch-package
Ojalá la histeria actual no lleve a decisiones inútiles de este tipo
Esto probablemente se ha discutido cientos de veces dentro de NPM desde que se reportó públicamente hace 10 años
Por culpa de Shai Halud, ahora ya es demasiado grande para ignorarlo
“Lo arreglamos pronto” casi siempre termina siendo “mierda, ahora sí hay que arreglarlo”
Me pregunto si las versiones actuales LTS de Node, si no recuerdo mal 22, 24 y 26, planean subir el npm incluido a v12 para beneficiarse de esta corrección de seguridad
Ahora mismo todas incluyen npm v11
En v18.19.0[1] y v20.10.0[2] subieron npm de 9 a 10
[1]: https://nodejs.org/en/blog/release/v18.19.0#npm-updated-to-v...
[2]: https://nodejs.org/en/blog/release/v20.10.0
Como dice el artículo, solo hace falta configurar los valores correctos por defecto
Lo mejor de este cambio es que, al cambiar el valor por defecto, vamos a ver romperse de inmediato esos paquetes molestos que asumen que estas configuraciones estarán activadas cuando un desarrollador nuevo simplemente corra install
Por ejemplo, podría hacer que se abandone la práctica de asumir que se pueden ejecutar scripts
No queda claro solo leyendo el artículo, pero parece que la lista de scripts permitidos no es una configuración global sino que admite permisos por paquete
Parece que será más fácil mantener reglas organizacionales que solo permitan scripts para paquetes específicos
Me pregunto si existe algún linter que sirva para evitar valores inseguros por defecto en configuraciones del gestor de paquetes
grep?Me pregunto si todavía hay alguna razón para usar Yarn
No sé si Yarn también implementó protecciones para frenar ataques a la cadena de suministro
Hasta ahora solo conocía pnpm, así que está bien que npm también se esté poniendo al día
La rama actual de Yarn, 4.x, garantiza un comportamiento determinista hasta un grado quizá excesivo, y puedes esperar consistencia en todo el equipo
En funciones, tiene muchos pequeños detalles que, una vez que te acostumbras, se acumulan y terminan marcando una gran diferencia
La próxima versión mayor también seguirá empujando en esa misma dirección, con mejor rendimiento y funciones que hasta ahora no se habían podido implementar precisamente por depender de esas mejoras de rendimiento
Por cierto, soy el maintainer principal de Yarn
También tiene funciones de protección de la cadena de suministro
Al final ya no lo soportamos y migramos a pnpm; las instalaciones quedaron mucho más rápidas tanto en CI como en las máquinas locales
La migración nos tomó como un día con ayuda de un LLM
node_moduleshttps://yarnpkg.com/features/pnp
Se parece bastante a usar
.jaren Java en vez de un árbol de directorios de archivos.classAunque es un poco hacky, y el soporte en editores y herramientas es irregular
Como reduce muchísimo la cantidad de archivos pequeños, puede ser especialmente más rápido si te toca trabajar en Windows sí o sí
Incluso puedes meter los archivos comprimidos en el repositorio git, eliminando la dependencia de Internet y del registro de paquetes
De verdad no sé la respuesta
No sabía que npm era propiedad de GitHub
Eso explica varias cosas
Algunas partes resultan interesantes de leer con el paso del tiempo
El comentario más votado decía: “Microsoft no hace todo bien, pero honestamente la adquisición de GitHub ha salido mucho mejor de lo que esperaba. En lugar de imponer políticas centradas en Microsoft a GitHub, Microsoft ha adoptado más cosas de GitHub desde la perspectiva de producto. GitHub sigue operando como si fuera una empresa separada”
Había levantado capital de riesgo, pero no encontró un modelo de negocio sostenible
GitHub la adquirió para salvar el ecosistema, y esa adquisición tampoco es que le haya dado grandes beneficios a GitHub
Y Microsoft movió GitHub a Azure
Me pregunto si la lista permitida en
package.jsonfija también la versión del paquete, o solo el nombre del paqueteQué bueno que
allowScriptsvenga desactivado por defecto[mira el reloj] ¿Apenas 18 meses detrás de pnpm?
¿Qué propósito tiene esto del lado de JavaScript?