Errores de NPM al instalar paquetes en Windows Share


52

Tengo Ubuntu 12.10 ejecutándose como invitado de VMware en mi host de Windows 8.

He compartido una carpeta en mi Windows 8 Host y está montada en el invitado de Ubuntu al inicio usando esta entrada en fstab:

//myhost/work /work cifs credentials=/home/user/.smbcredentials,noserverino,nounix,uid=user,gid=user,file_mode=0777,dir_mode=0777 0 0 

El recurso compartido funciona bien y puede ser atendido por un servidor web como nginx.

Sin embargo, parece haber problemas cuando instalo los paquetes node.js usando npm, obtengo un montón de errores como este:

user@ubuntu:/work/test$ sudo npm install grunt
npm http GET https://registry.npmjs.org/grunt
npm http 304 https://registry.npmjs.org/grunt
...
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash'
npm ERR! error rolling back  grunt@0.4.1 { [Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/work/test/node_modules/grunt/node_modules/lodash' }
npm ERR! Error: UNKNOWN, symlink '../which/bin/which'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path ../which/bin/which
npm ERR! code UNKNOWN
npm ERR! errno -1
npm ERR! Error: ENOENT, chmod '/work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! fstream_finish_call chmod
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:305:19
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/minimatch/test/basic.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/glob/test/00-setup.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
...
npm ERR! not ok code 0
user@ubuntu:/work/test$ 

¿Qué podría estar causando este problema? Desde la línea de comandos, puedo chmod, rmdirentre otras cosas, usar sudo sin ningún problema.

Respuestas:


118

Correr con --no-bin-linksarreglado para mí:

npm install --no-bin-links

--no-bin-linksle dice npmque no cree enlaces simbólicos. No hay una manera (que yo sepa) de traducir enlaces simbólicos a un recurso compartido de Windows.


15
Desearía poder votarte 200 veces más. Esto hace posible usar Vagrant en Windows.
Clint

1
npm install --no-bin-link también funciona.
JamieJag

2
¡Gran respuesta! Pero, ¿hay alguna manera de hacer que esto funcione con las "devDependencies" de un archivo package.json de Grunt? Eso sería increíble :)
Jelmer

1
¡Gracias! Vagrant debería poner esto en su documentación oficial para Windows. Todos mis puntos son de ti.
htxryan

1
Gracias, me has salvado el día, estaba luchando desde 1 día
Manjunath Siddappa

6

Cómo permitir la creación de enlaces simbólicos en Windows esta página me ayudó mucho, lo que explica que esto suceda incluso si su carpeta compartida se puede escribir.

Para solucionarlo, debe habilitar la función de enlaces simbólicos en VirtualBox.

Ejecutar en cmd prompt:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Luego verifique por:

VBoxManage getextradata YOURVMNAME enumerate

Si su usuario pertenece al grupo de Administradores, inicie VirtualBox con "Ejecutar como administrador".

Por defecto, la política de seguridad de Windows 7 no permite crear enlaces simbólicos, ya que es una amenaza potencial para la seguridad. Ejecute "secpol.msc" y vaya a "Políticas locales-Asignaciones de derechos de usuario" y agregue su usuario a "Crear enlaces simbólicos". No intenté eso, pero podría ser eso después de que virtualbox podría ejecutarse como un usuario normal.


3

De acuerdo con lorem, pero no es suficiente.

  1. ejecute Virtualbox 'como administrador administrativo' en Windows.

  2. asegúrese de ejecutar: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Reemplace YOUR_VM y YOUR_SHARED_FOLDER con sus valores. Puede verificar el valor a través de:VBoxManage.exe getextradata boot2docker-vm enumerate

Hay un error de virtualbox que rastrea este problema.


1

Las versiones más recientes de VirtualBox deberían permitir enlaces simbólicos si inicia VirtualBox como Adminstrator (clic derecho: Ejecutar como administrador).

Lo mismo se aplica a los cuadros vagabundos: simplemente ejecute cmd.exe / PowerShell como administrador y listo.


0

en este número de npm @drmyersii da una gran solución, solo copiaré y pegaré para no vincular solo la respuesta.

La solución real aquí sería establecer su configuración para permitir enlaces simbólicos en los hosts de Windows en su Vagrantfile. Aquí hay un ejemplo (suponiendo que lo esté ejecutando en VirtualBox):

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
end

esto funcionó muy bien para mí y ahora puedo usar trago con scotchbox .


0

Para mí ninguna de estas respuestas funcionó. No estoy seguro de por qué, pero creo que es porque mi parte es nfs. Por lo tanto, no pude permitir que los enlaces simbólicos incluso cuando se ejecutaba como Administrador y cambiara la configuración de los setextradatos. Estaba trabajando con Gulp y algunos otros paquetes que parecen tener problemas para obedecer --no-bin-links. Todavía intentaba crear algunos enlaces simbólicos y obviamente fallaba. Finalmente, este hilo en Github me dio una idea de una "solución", por muy chiflada que sea. "Simplemente" instalé el proyecto en mi carpeta no compartida y lo configuré como mi NODEPATH.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

La advertencia es que afectará a todo el servidor y al flujo de trabajo de actualizar / cambiar el paquete.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.