Erros Npm ao instalar pacotes no Windows Share

52

Eu tenho o Ubuntu 12.10 em execução como convidado do VMware no meu host do Windows 8.

Compartilhei uma pasta no meu Windows 8 Host e ela é montada no convidado Ubuntu na inicialização usando esta entrada em fstab:

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

O compartilhamento funciona bem e pode ser servido por um servidor da web como o nginx.

No entanto, parece haver problemas ao instalar pacotes node.js usando o npm, recebo vários erros 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  [email protected] { [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!     <[email protected]>

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!     <[email protected]>

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!     <[email protected]>

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!     <[email protected]>
...
npm ERR! not ok code 0
user@ubuntu:/work/test$ 

O que poderia estar causando este problema? Na linha de comando, posso chmod, rmdirentre outras coisas, usar o sudo sem problemas.

F21
fonte

Respostas:

118

Correndo com --no-bin-linkscorrigi-lo para mim:

npm install --no-bin-links

--no-bin-linksdiz npmpara não criar nenhum link simbólico. Não existe uma maneira (que eu saiba) de traduzir links simbólicos para um compartilhamento do Windows.

F21
fonte
15
Eu gostaria de poder te votar mais 200 vezes. Isso possibilita o uso do Vagrant no Windows.
Clint
11
npm install --no-bin-link também funciona.
JamieJag
2
Ótima resposta! Mas existe uma maneira de fazer isso funcionar com os "devDependencies" de um arquivo package.json do Grunt? Isso seria :) incrível
Jelmer
11
Obrigado! O Vagrant deve colocar isso em sua documentação oficial para Windows. Todos os meus pontos pertencem a você.
Htxryan
11
Obrigado, você salvou o meu dia, eu estava lutando de 1 dia
Manjunath Siddappa
6

Como permitir a criação de links simbólicos no Windows, esta página me ajudou muito, o que explica que isso acontece mesmo que sua pasta compartilhada seja gravável.

Para corrigi-lo, é necessário ativar o recurso de links simbólicos no VirtualBox.

Execute no prompt do cmd:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Em seguida, verifique por:

VBoxManage getextradata YOURVMNAME enumerate

Se o seu usuário pertence ao grupo Administradores, inicie o VirtualBox com "Executar como Administrador"!

Por padrão, a política de segurança do Windows 7 não permite a criação de links simbólicos, pois é uma ameaça potencial à segurança. Execute "secpol.msc" e navegue até "Diretivas locais - atribuições de direitos de usuário" e adicione seu usuário a "Criar links simbólicos". Eu não tentei isso, mas pode ser que depois dessa caixa virtual possa ser executado como um usuário comum.

matiangul
fonte
3

Concorde com o lorem, mas não é suficiente.

  1. execute o Virtualbox 'como administrador' no Windows.

  2. certifique-se de executar: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Substitua YOUR_VM e YOUR_SHARED_FOLDER pelos seus valores. Você pode verificar o valor via:VBoxManage.exe getextradata boot2docker-vm enumerate

um bug no Virtualbox que rastreia esse problema.

hao
fonte
1

As versões mais recentes do VirtualBox devem permitir links simbólicos se você iniciar o VirtualBox como administrador (clique com o botão direito do mouse: Executar como administrador).

O mesmo se aplica às caixas vagrantes: basta executar o cmd.exe / PowerShell como administrador e você estará pronto.

macaco lorem
fonte
0

no presente npm questão @drmyersii dar uma grande solução, eu só vou copiar e colar para não ligar somente a resposta.

A solução real aqui seria definir sua configuração para permitir links simbólicos nos hosts do Windows no seu Vagrantfile. Aqui está um exemplo (supondo que você o esteja executando no VirtualBox):

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

isso funcionou muito bem para mim e agora eu posso usar gulp com scotchbox .

Edu Ruiz
fonte
0

Para mim, nenhuma dessas respostas funcionou. Não sei por que, mas acredito que é porque minha parte é nfs. Portanto, não consegui permitir links simbólicos mesmo quando executando como administrador e alterando as configurações de setextradata. Eu estava trabalhando com o gulp e alguns outros pacotes que parecem ter problemas para obedecer --no-bin-links. Ainda estava tentando criar alguns links simbólicos e obviamente falhando. Finalmente, este tópico no Github me mostrou uma "solução", por mais hacky que possa ser. "Simplesmente" instalei o projeto na minha pasta não compartilhada e defini-o como meu NODEPATH.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

Advertência é que isso afetará todo o servidor e o fluxo de trabalho de atualização / alteração da embalagem.

Melissa
fonte