Intentar instalar paquetes npm en Docker da como resultado un error como:
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "-g" "install" "yuglify"
npm ERR! node v8.10.0
npm ERR! npm v3.5.2
npm ERR! path /usr/local/lib/node_modules/yuglify
npm ERR! EXDEV: cross-device link not permitted, rename '/usr/local/lib/node_modules/yuglify' -> '/usr/local/lib/node_modules/.yuglify.DELETE'
Mi Dockerfile se ve así:
FROM ubuntu:18.04
ENV PYTHONUNBUFFERED 1
USER root
RUN apt-get -yq update && apt-get install -yq npm
CMD npm -g install yuglify
Curiosamente, si ejecuto el comando npm install dos veces, la segunda llamada funciona.
Ver esta superficie nuevamente con v7 en imágenes de docker (v7.0.3)
Parece que es una regresión de https://github.com/npm/npm/pull/15901
Reproducción:
docker run --rm mhart/alpine-node:15 npm install -g npm<strong i="6">@7</strong>
En npm 7, "toda la clase de instalador se mueve a @ npmcli / arborist".: Https://github.com/npm/cli/blob/latest/CHANGELOG.md#v700 -beta0-2020-08-04
Creo que el problema podría estar ahí. Parece que intenta cambiar el nombre en lugar de moverse ahora: https://github.com/npm/arborist/blob/main/lib/arborist/reify.js#L254
Lo que parece una regresión de ese antiguo PR que vinculó: https://github.com/npm/npm/pull/15901
Ese PR reemplazó todos los cambios de nombre con movimientos ("instalar: use el movimiento compatible con EXDEV en lugar de cambiar el nombre")
Comentario más útil
En npm 7, "toda la clase de instalador se mueve a @ npmcli / arborist".: Https://github.com/npm/cli/blob/latest/CHANGELOG.md#v700 -beta0-2020-08-04
Creo que el problema podría estar ahí. Parece que intenta cambiar el nombre en lugar de moverse ahora: https://github.com/npm/arborist/blob/main/lib/arborist/reify.js#L254
Lo que parece una regresión de ese antiguo PR que vinculó: https://github.com/npm/npm/pull/15901
Ese PR reemplazó todos los cambios de nombre con movimientos ("instalar: use el movimiento compatible con EXDEV en lugar de cambiar el nombre")