node.js - example - npm windows
npm instalar sin opción de enlaces simbólicos no funciona (3)
Configuré un entorno de desarrollo con Windows 8 y Ubuntu como máquina virtual. Para eso uso VirtualBox.
También me las arreglo para crear una carpeta compartida en VirtualBox.
En esta carpeta compartida, intento iniciar un proyecto con ember-generator de Yeoman.
yo ember --skip-install --karma
npm install --no-bin-links
Para instalar los módulos NPM, uso la opción "--no-bin-links" para no crear enlaces simbólicos. Desafortunadamente, todavía tengo errores en las creaciones de enlaces simbólicos ... ¿Lo que utilizo, aunque esta opción? Ahí tiene un bicho?
Los documentos de NPM sobre el parámetro "--no-bin-links" dicen:
evitará que npm cree enlaces simbólicos para cualquier binario que pueda contener el paquete.
Lo que hará que NPM no cree enlaces en la carpeta node_modules/.bin
. También busqué una forma de evitar que NPM cree enlaces simbólicos al usar npm install ../myPackage
, pero no puedo encontrar ninguna solución ...
Actualización: el equipo de soporte de npm dijo que esto reproducirá el comportamiento anterior (sin enlaces simbólicos):
npm install $(npm pack <folder> | tail -1)
Funciona para mí en git-bash en Windows 10.
Tengo un ambiente similar. Al parecer, la sincronización de virtualbox (vagrant) tiene problemas al cambiar el nombre o mover archivos, lo que ocurre al actualizar módulos. Si haces una lista de archivos (ls -alhp) en la línea de comandos y ves ??? para los permisos de archivo, es hora de reiniciar su virtualbox. Esto establecerá los permisos a valores válidos. Luego use la opción --no-bin-links cuando instale un módulo.
Esta página de desbordamiento de pila aparece en los resultados de búsqueda de Google cuando se intenta resolver el problema de la instalación de módulos locales (es decir, npm install ../myPackage
) y no se desean enlaces simbólicos. Así que estoy agregando esta respuesta a continuación para ayudar a otros que terminan aquí.
Solución # 1 - Para el entorno de desarrollo.
El uso de la solución propuesta por el equipo de soporte de NPM como se menciona en los otros trabajos de respuesta ...
# Reproduces the old behavior of hard copies and not symlinks
npm install $(npm pack <folder> | tail -1)
Esto está bien en el entorno de desarrollo para instalaciones manuales.
Solución # 2 - Para el entorno de construcción.
Sin embargo, en nuestro caso, el entorno de desarrollo no importa demasiado, ya que cuando se confirman nuestros cambios en Git, la carpeta ./node_modules/
se ignora de todos modos.
Los archivos ./package.json
y ./package-lock.json
son lo importante y se llevan a nuestro entorno de compilación.
En nuestro entorno de compilación (parte de nuestra canalización automatizada de CI / CD), la automatización simplemente ejecuta el npm install
y se basa en las dependencias enumeradas en el archivo package.json
.
Entonces, aquí es donde el problema nos afecta. Los archivos a los que se hace referencia localmente en la lista de dependencias del package.json
hacen que aparezcan enlaces simbólicos. Ahora estamos de vuelta al viejo problema. Estos enlaces simbólicos se incorporan a la salida de la compilación que se mueve a los entornos de escenario y producción.
Lo que hicimos en cambio es usar rsync
en modo de archivo con la opción --copy-links
que convierte los enlaces simbólicos en copias del original.
Aquí es cómo se ve el comando en la compilación automatizada:
# Install dependencies based on ./package.json
npm install
# Make a copy that changes symlinks to hard copies
rsync --archive --verbose --copy-links ./node_modules/ ./node_modules_cp/
# Remove and replace
rm -r ./node_modules/
mv ./node_modules_cp/ ./node_modules/