node.js - nodejs - update node js
Nodejs+npm, instalando módulos en la partición ntfs (7)
Estoy bastante seguro de que los enlaces simbólicos no se pueden crear en la unidad compartida ("carpeta compartida"). Aún más imposible con una máquina host de Windows y un invitado de Linux.
Las máquinas host no conocen el sistema de archivos de los invitados . Una máquina invitada es una blackbox para el host. No puede decirle al anfitrión "Bueno, esto enlaza con /etc/...
" cuando el anfitrión no sabe dónde está este /etc
:).
En resumen: desafortunadamente no.
En más detalle:
¡Sería realmente feliz si estoy equivocado! Es un gran dolor en mi proceso de desarrollo.
Intenté muchas opciones. Por defecto, el sistema de archivos que utilizan las "carpetas compartidas" es vboxsf
, algo si no es lo mismo que samba
(protocolo predeterminado de uso compartido de redes para Windows), así que:
- Traté de usar el uso compartido de red nativo de Windows y luego montar la unidad de red en el invitado, ya que el huésped y el host están en la misma red. El problema todavía estaba allí .
- Intenté ejecutar un servidor NFS en Windows (Hanewin NFS Server) junto con SFU / SUA (Servicios de Windows para UNIX) pero esto tiene problemas con los bloqueos GIT . Probablemente otros problemas también, fue hace un tiempo y no recuerdo claramente
- Intenté lo contrario: compartir un directorio en la máquina virtual con Windows. Pero eso es estúpido ya que todos los archivos estarán en la caja virtual y es bastante lento para acceder a Windows
- Estaba siendo estúpido y pensé: " vamos a montar una unidad virtual en Windows y Linux" . No intente esto, corrompe el disco virtual. Algo que debería haber sabido.
Puede haber un protocolo para compartir la red que no sea samba
y nfs
que tal vez copie los archivos cuando se intente crear un "enlace simbólico". No lo sé realmente
Sin embargo, todavía no he encontrado uno y el "bloqueo" parece ser una tarea del sistema de archivos en sí, así que dudo que cualquier protocolo de red (a menos que tenga un registro dedicado de algún tipo para los bloqueos) pueda hacer esto.
Tengo un problema al instalar módulos npm. NodeJS está instalado en Ubuntu 11.10 ejecutándose en Virtual Box en el host de Windows. Mis archivos de proyecto están en la partición NTFS (tengo que compartirlos con Windows). Cuando trato de instalar algún módulo npm, aparece un error y el módulo no está instalado. Descubrí que el problema ocurre cuando npm intenta crear enlaces simbólicos.
Probablemente no pueda crear enlaces simbólicos en la partición NTFS, cuando estoy instalando el módulo "dentro" del sistema de archivos Linux, todo funciona bien.
¿Cómo puedo arreglar esto? No quiero resolver dependencias manualmente: /
Los permisos de enlace simbólico, o los --no-bin-links
no funcionó para nosotros. En su lugar, optamos por mover nuestros node_modules
desde el /vagrant
share. Creamos un enlace simbólico de /vagrant/node_modules
a /tmp/node_modules
. Solo puede hacer esto si su node_modules
no está en control de versión . ¡Mire this primero!
También vea http://kmile.nl/post/73956428426/npm-vagrant-and-symlinks-on-windows
Para cualquiera que todavía tenga este problema después de probar npm install --no-bin-links
.
No pude hacer funcionar ninguna de las soluciones anteriores cuando me encontré con un problema similar al ejecutar la npm install
en un cuadro de Laravel Homestead Vagrant en un host de Windows 7 que usa VirtualBox. El cuadro de invitado tiene un directorio asignado al sistema de archivos de Windows.
El problema causaba varios mensajes de error e instalaciones fallidas del paquete. ¡El que es más relevante para la pregunta fue npm ERR! UNKNOWN, symlink ''<some filename>''
npm ERR! UNKNOWN, symlink ''<some filename>''
.
Para solucionarlo, pude ejecutar npm install
en la línea de comandos de Git bash en Windows en lugar de bash en el Linux invitado.
Para hacer esto, necesitará instalar Git para Windows y NodeJS (ambos en su cuadro de Windows).
p.ej
- Instalar Chocolatey https://chocolatey.org/
-
choco install nodejs.install
-
choco install git.install
- Ejecute
C:/Program Files (x86)/Git/Git Bash.vbs
- En la línea de comando de Git Bash, cambie el directorio a la ubicación de su archivo package.json, por ejemplo,
cd /c/projects/projectname
- Ejecute la
npm install
Todo parece instalarse con éxito.
Pruebe esto - http://ahtik.com/blog/2012/08/16/fixing-your-virtualbox-shared-folder-symlink-error/
¡Funciona para mi!
Básicamente, estableces un parámetro
VBoxManage setextradata YOURVMNAME VBoxInternal2 / SharedFoldersEnableSymlinksCreate / YOURSHAREFOLDERNAME 1
Y luego ejecuta la VM como administrador ...
Si no usa módulos nativos (compilados de C / C ++), puede usar npm en su máquina virtual Ubuntu y copiar la carpeta node_modules en su unidad de Windows.
conjunto de comportamiento fsutil SymlinkEvaluation L2L: 1 R2R: 1 L2R: 1 R2L: 1
este comando habilita enlaces simbólicos en Windows. para una mejor explicación de los comandos crípticos en la visita final: ¿Cómo puedo superar el "El enlace simbólico no se puede seguir porque su tipo está deshabilitado". error al obtener el objetivo de un enlace simbólico en Server 2008?
En resumen
Los códigos de comportamiento para el conjunto de comportamientos fsutil SymlinkEvaluation, es decir, L2L, L2R, R2L y R2R, significan lo siguiente:
L significa "Local", y R para "Remoto" (¿quién habría thunk?) La PRIMERA L o R - antes de la 2 - se refiere a la ubicación del enlace en sí (en oposición a su objetivo) con respecto a la máquina ACCEDIENDO al enlace. El SEGUNDO L o R - después del 2 - se refiere a la ubicación del objetivo del enlace en relación con la máquina donde se encuentra el LINK.
Desde la versión 1.2.21, npm tiene una nueva opción para el comando de install
. --no-bin-links
Puede usar si para instalar un módulo de nodo específico
npm install express --no-bin-links
y también para una instalación de package.json
npm install --no-bin-links
Con esta opción, he podido instalar muchos módulos npm sin problemas en mi servidor compartido dentro de la máquina virtual (huésped de Ubuntu, host de Windows)
El compromiso donde se agregó la opción al código b4c58617039c21c10889a9869f8e86a23e17d3a0 es b4c58617039c21c10889a9869f8e86a23e17d3a0