Kesalahan NPM ketika menginstal paket di windows berbagi

52

Saya memiliki Ubuntu 12.10 berjalan sebagai tamu VMware di host Windows 8 saya.

Saya telah berbagi folder pada Host Windows 8 saya dan sudah terpasang di tamu Ubuntu saat startup menggunakan entri ini di fstab:

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

Berbagi berfungsi dengan baik dan dapat dilayani oleh server web seperti nginx.

Namun, sepertinya ada masalah ketika saya menginstal paket node.js menggunakan npm, saya mendapatkan banyak kesalahan seperti ini:

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$ 

Apa yang bisa menyebabkan masalah ini? Dari baris perintah, saya bisa chmod, rmdirantara lain menggunakan sudo tanpa masalah.

F21
sumber

Jawaban:

118

Berjalan dengan --no-bin-linksmemperbaikinya untuk saya:

npm install --no-bin-links

--no-bin-linksmemberitahu npmuntuk tidak membuat tautan simbolis. Tidak ada cara (setahu saya) menerjemahkan symlink ke Windows share.

F21
sumber
15
Kuharap aku bisa membuatmu marah 200 kali lagi. Ini memungkinkan untuk menggunakan Vagrant di windows.
Clint
1
npm install --no-bin-link juga berfungsi.
JamieJag
2
Jawaban bagus! Tetapi apakah ada cara untuk membuat ini berfungsi dengan "devDependencies" dari file package.json dari Grunt? Itu akan luar biasa :)
Jelmer
1
Terima kasih! Vagrant harus memasukkan ini dalam dokumentasi resmi mereka untuk Windows. Semua poin saya adalah milik Anda.
htxryan
1
Terima kasih, Anda telah menyelamatkan hari saya, saya berjuang dari 1 hari
Manjunath Siddappa
6

Cara mengizinkan membuat symlink di windows halaman ini banyak membantu saya yang menjelaskan bahwa ini terjadi bahkan jika folder bersama Anda dapat ditulisi.

Untuk memperbaikinya, Anda perlu mengaktifkan fitur symlink di VirtualBox.

Jalankan di cmd prompt:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Kemudian verifikasi dengan:

VBoxManage getextradata YOURVMNAME enumerate

Jika pengguna Anda termasuk dalam grup Administrators, mulailah VirtualBox dengan "Run as Administrator"!

Secara default Windows 7 kebijakan keamanan tidak memungkinkan membuat symlink karena ini merupakan ancaman keamanan potensial. Jalankan "secpol.msc" dan navigasikan ke "Penetapan Hak Kebijakan Pengguna Lokal" dan tambahkan pengguna Anda ke "Buat tautan simbolis". Saya tidak mencobanya tetapi bisa jadi setelah itu virtualbox dapat dijalankan sebagai pengguna biasa.

matiangul
sumber
3

Setuju dengan lorem, tetapi itu tidak cukup.

  1. jalankan Virtualbox 'sebagai admininstrator' di Windows.

  2. pastikan Anda dieksekusi: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Ganti YOUR_VM dan YOUR_SHARED_FOLDER dengan nilai Anda. Anda dapat memeriksa nilainya melalui:VBoxManage.exe getextradata boot2docker-vm enumerate

Ada bug virtualbox melacak masalah ini.

hao
sumber
1

Versi VirtualBox yang lebih baru akan memungkinkan symlink jika Anda memulai VirtualBox sebagai Adminstrator (klik kanan: Jalankan sebagai administrator).

Hal yang sama berlaku untuk kotak gelandangan: jalankan cmd.exe / PowerShell Anda sebagai admin dan Anda siap melakukannya.

monyet lorem
sumber
0

dalam masalah npm ini @drmyersii memberikan solusi yang bagus, saya hanya akan menyalin dan menempel agar tidak menautkan jawabannya saja.

Solusi sebenarnya di sini adalah mengatur konfigurasi Anda untuk memungkinkan symlink pada host Windows di Vagrantfile Anda. Berikut ini sebuah contoh (dengan asumsi bahwa Anda menjalankannya di VirtualBox):

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

ini bekerja sangat baik untuk saya dan sekarang saya dapat menggunakan tegukan dengan scotchbox .

Edu Ruiz
sumber
0

Bagi saya tidak ada jawaban yang berhasil. Saya tidak yakin mengapa tetapi saya percaya itu karena bagian saya adalah nfs. Jadi saya tidak bisa mendapatkannya untuk memungkinkan symlink bahkan ketika berjalan sebagai Administrator dan mengubah pengaturan setextradata. Saya sedang bekerja dengan tegukan dan beberapa paket lain yang tampaknya memiliki masalah mematuhi --no-bin-links. Itu MASIH mencoba membuat beberapa tautan simbolis dan jelas gagal. Akhirnya utas ini pada Github memberi petunjuk kepada saya menjadi "solusi", mungkin seperti itu. Saya "cukup" menginstal proyek di folder non-shared saya dan menetapkan itu sebagai NODEPATH saya.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

Peringatan adalah bahwa hal itu akan mempengaruhi seluruh server dan alur kerja memperbarui / mengubah kemasan.

Melissa
sumber