Помилки Npm при встановленні пакетів на Windows


52

У мене на хості Windows 8 працює Ubuntu 12.10 як гість VMware.

Я поділив папку на своєму хості Windows 8, і вона встановлена ​​в гості Ubuntu при запуску, використовуючи цей запис у fstab:

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

Частка працює чудово і може обслуговуватися веб-сервером, таким як nginx.

Однак, мабуть, виникають проблеми, коли я встановлюю пакети node.js за допомогою npm, я отримую купу помилок, таких як:

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$ 

Що може спричинити цю проблему? З командного рядка я можу chmod, rmdirсеред іншого, використовувати судо без жодних проблем.

Відповіді:


118

Запуск з --no-bin-linksфіксованим для мене:

npm install --no-bin-links

--no-bin-linksвказує npmне створювати ніяких символічних посилань. Не існує способу (наскільки мені відомо) перекладу символьних посилань на спільний доступ до Windows.


15
Я б хотів, щоб я міг отримати вашу пропозицію ще 200 разів. Це дає можливість використовувати Vagrant на windows.
Клінт

1
npm install - також працює -no-bin-link.
JamieJag

2
Чудова відповідь! Але чи є спосіб зробити цю роботу з "devDependpend" файлу package.json від Grunt? Це було б дивовижно :)
Джелмер

1
Дякую! Vagrant повинен помістити це у своїй офіційній документації для Windows. Усі мої моменти належать вам.
htxryan

1
Дякую, ти врятував мені день, я боровся з 1 дня
Manjunath Siddappa

6

Як дозволити створення символьних посилань на Windows, ця сторінка мені дуже допомогла, що пояснює, що це відбувається, навіть якщо ваша спільна папка піддається запису.

Щоб виправити це, вам потрібно включити функцію посилань у VirtualBox.

Запустити у підказці cmd:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Потім перевірте:

VBoxManage getextradata YOURVMNAME enumerate

Якщо ваш користувач належить до групи адміністраторів, тоді запустіть VirtualBox з "Запустити як адміністратор"!

За замовчуванням політика безпеки Windows 7 не дозволяє створювати посилання, оскільки це потенційна загроза безпеці. Запустіть "secpol.msc" та перейдіть до "Місцева політика - призначення прав користувача" та додайте свого користувача до "Створити символічні посилання". Я не пробував цього, але могло бути, що після цього virtualbox можна запустити як звичайний користувач.


3

Погодьтеся з lorem, але цього недостатньо.

  1. запустіть Virtualbox "як адміністратор" у Windows.

  2. переконайтеся, що ви виконали: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Замініть YOUR_VM та YOUR_SHARED_FOLDER своїми значеннями. Ви можете перевірити значення за допомогою:VBoxManage.exe getextradata boot2docker-vm enumerate

Існує помилка virtualbox, яка відстежує цю проблему.


1

Новіші версії VirtualBox повинні дозволяти посилання, якщо ви запускаєте VirtualBox як адміністратор (клацніть правою кнопкою миші: Запустити як адміністратор).

Те ж стосується бродячих коробок: просто запустіть cmd.exe / PowerShell як адміністратор, і ви готові йти.


0

у цьому випуску npm @drmyersii дають чудове рішення, я лише скопіюю та вставте, щоб не пов’язати лише відповідь.

Справжнім рішенням було б встановити вашу конфігурацію, щоб дозволити посилання на хости Windows у вашому Vagrantfile. Ось приклад (якщо припустити, що ви запускаєте його у VirtualBox):

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

це чудово працювало для мене, і тепер я можу використовувати глоток зі скотчбоком .


0

Для мене жодна з цих відповідей не спрацювала. Я не впевнений, чому, але я вважаю, що це моя частка. Тому я не міг зробити це, щоб дозволити посилання навіть при запуску в якості адміністратора та зміні налаштувань сетексданих. Я працював з gulp та деякими іншими пакунками, які, здається, мають проблеми з дотриманням --no-bin-link. СТІЛЬ намагався створити деякі символічні зв’язки і, очевидно, зазнав невдачі. Нарешті ця нитка на Github втягнула мене в "рішення", хакі, як це може бути. Я "просто" встановив проект у своїй папці, що не поділяється загалом, і встановив його як свій NODEPATH.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

Caveat полягає в тому, що це вплине на весь сервер і на робочий процес оновлення / зміни упаковки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.