Errori Npm durante l'installazione di pacchetti sulla condivisione Windows


52

Ho Ubuntu 12.10 in esecuzione come guest VMware sul mio host Windows 8.

Ho condiviso una cartella sul mio host Windows 8 ed è montata nel guest Ubuntu all'avvio usando questa voce in fstab:

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

La condivisione funziona bene ed è in grado di essere servita da un server web come nginx.

Tuttavia, sembra che ci siano problemi quando installo i pacchetti node.js usando npm, ottengo un sacco di errori come questo:

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$ 

Cosa potrebbe causare questo problema? Dalla riga di comando, posso chmod, rmdirtra l'altro, usare sudo senza problemi.

Risposte:


118

Funzionando con --no-bin-linksriparato per me:

npm install --no-bin-links

--no-bin-linksdice npmdi non creare alcun collegamento simbolico. Non c'è modo (per quanto ne sappia) di tradurre i collegamenti simbolici in una condivisione di Windows.


15
Vorrei poterti votare altre 200 volte. Ciò consente di utilizzare Vagrant su Windows.
Clint

1
npm install --no-bin-link funziona anche.
JamieJag,

2
Bella risposta! Ma c'è un modo per farlo funzionare con le "devDependencies" di un file package.json di Grunt? Sarebbe fantastico :)
Jelmer

1
Grazie! Vagrant dovrebbe inserirlo nella loro documentazione ufficiale per Windows. Tutti i miei punti ti appartengono.
htxryan,

1
Grazie, mi hai salvato la giornata, stavo lottando da 1 giorno
Manjunath Siddappa,

6

Come consentire la creazione di collegamenti simbolici su Windows questa pagina mi ha aiutato molto, il che spiega che ciò accade anche se la cartella condivisa è scrivibile.

Per risolverlo, devi abilitare la funzione symlink in VirtualBox.

Esegui al prompt cmd:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Quindi verificare tramite:

VBoxManage getextradata YOURVMNAME enumerate

Se il tuo utente appartiene al gruppo degli amministratori, avvia VirtualBox con "Esegui come amministratore"!

Per impostazione predefinita, i criteri di sicurezza di Windows 7 non consentono la creazione di collegamenti simbolici poiché rappresentano una potenziale minaccia per la sicurezza. Esegui "secpol.msc" e vai a "Criteri locali-assegnazioni di diritti utente" e aggiungi il tuo utente a "Crea collegamenti simbolici". Non l'ho provato, ma potrebbe essere che dopo quel virtualbox possa essere eseguito come utente normale.


3

Concordo con il lorem, ma non è abbastanza.

  1. eseguire Virtualbox "come amministratore" su Windows.

  2. assicurati di aver eseguito: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Sostituisci YOUR_VM e YOUR_SHARED_FOLDER con i tuoi valori. Puoi controllare il valore tramite:VBoxManage.exe getextradata boot2docker-vm enumerate

C'è un bug di virtualbox che traccia questo problema.


1

Le versioni più recenti di VirtualBox dovrebbero consentire collegamenti simbolici se si avvia VirtualBox come Adminstrator (tasto destro: Esegui come amministratore).

Lo stesso vale per le scatole vagabonde: esegui semplicemente cmd.exe / PowerShell come amministratore e sei a posto.


0

in questo numero di npm @drmyersii fornisci un'ottima soluzione, copierò e incollerò solo per non collegare solo la risposta.

La vera soluzione qui sarebbe quella di impostare la configurazione per consentire collegamenti simbolici su host Windows nel tuo Vagrantfile. Ecco un esempio (supponendo che lo stiate eseguendo in VirtualBox):

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

questo ha funzionato benissimo per me e ora posso usare gulp con scotchbox .


0

Per me nessuna di queste risposte ha funzionato. Non sono sicuro del perché, ma credo sia perché la mia condivisione è nfs. Quindi non sono riuscito a farlo per consentire i collegamenti simbolici anche quando sono in esecuzione come amministratore e modificando le impostazioni di setextradata. Stavo lavorando con gulp e alcuni altri pacchetti che sembrano avere problemi a obbedire a --no-bin-links. Stava ANCORA cercando di creare alcuni collegamenti simbolici e ovviamente falliva. Alla fine questo thread su Github mi ha indicato una "soluzione", per quanto confusa. Ho "semplicemente" installato il progetto nella mia cartella non condivisa e l'ho impostato come NODEPATH.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

L'avvertenza è che influenzerà l'intero server e il flusso di lavoro di aggiornamento / modifica del pacchetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.