Ошибки Npm при установке пакетов на общий ресурс Windows

У меня Ubuntu 12.10 работает в качестве гостя VMware на моем хосте Windows 8.

У меня есть общая папка на моем хосте 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 среди прочего использовать sudo без каких-либо проблем.

52
задан 19 March 2013 в 04:12

6 ответов

Как разрешить создание символических ссылок в Windows , эта страница мне очень помогла, что объясняет, что это происходит, даже если ваша общая папка доступна для записи.

Чтобы исправить это, вам нужно включить функцию символических ссылок в VirtualBox.

Запустите команду cmd:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Затем проверьте:

VBoxManage getextradata YOURVMNAME enumerate

Если ваш пользователь входит в группу администраторов, запустите VirtualBox с помощью «Запуск от имени администратора»!

По умолчанию политика безопасности Windows 7 не позволяет создавать символические ссылки, поскольку это потенциальная угроза безопасности. Запустите «secpol.msc» и перейдите к «Локальные политики-Назначения прав пользователя» и добавьте своего пользователя в «Создание символических ссылок». Я не пробовал этого, но могло случиться так, что после того, как тот виртуальный ящик мог быть запущен как обычный пользователь.

0
ответ дан 19 March 2013 в 04:12

Запуск с --no-bin-links исправил это для меня:

npm install --no-bin-links

--no-bin-links говорит npm не создавать никаких символических ссылок. Насколько мне известно, не существует способа перевода символических ссылок в общий ресурс Windows.

0
ответ дан 19 March 2013 в 04:12

В более новых версиях VirtualBox должны быть разрешены символические ссылки, если вы запускаете VirtualBox от имени администратора (щелкните правой кнопкой мыши: «Запуск от имени администратора»).

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

0
ответ дан 19 March 2013 в 04:12

Для меня ни один из этих ответов не сработал. Я не уверен, почему, но я верю, что это потому, что моя доля NFS. Поэтому я не мог разрешить использовать символические ссылки даже при запуске от имени администратора и изменении настроек setextradata. Я работал с gulp и некоторыми другими пакетами, у которых, похоже, есть проблемы , подчиняющиеся --no-bin-links. Это все еще пытался создать несколько символических ссылок и, очевидно, потерпел неудачу. Наконец, эта тема на Github подтолкнула меня к «решению», каким бы хакерским оно ни было. Я «просто» установил проект в свою папку без общего доступа и установил его как NODEPATH.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

Предостережение заключается в том, что это повлияет на весь сервер и рабочий процесс обновления / изменения упаковки.

0
ответ дан 19 March 2013 в 04:12

Согласитесь с Лоремом, но этого недостаточно.

  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

Существует ошибка виртуальной коробки , отслеживающая эту проблему.

0
ответ дан 19 March 2013 в 04:12

в этот выпуск npm @drmyersii дает отличное решение, я буду только копировать и вставлять, чтобы не связать только ответ.

Реальным решением здесь было бы установить вашу конфигурацию, чтобы разрешить символические ссылки на хосты Windows в вашем Vagrantfile. Вот пример (при условии, что вы запускаете его в VirtualBox):

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

это отлично сработало для меня, и теперь я могу использовать gulp с scotchbox .

0
ответ дан 19 March 2013 в 04:12

Другие вопросы по тегам:

Похожие вопросы: