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

52

У меня 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 без каких-либо проблем.

F21
источник

Ответы:

118

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

npm install --no-bin-links

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

F21
источник
15
Хотел бы я сказать тебе еще 200 раз. Это позволяет использовать Vagrant на Windows.
Клинт
1
Установка npm --no-bin-link также работает.
JamieJag
2
Отличный ответ! Но есть ли способ заставить это работать с "devDependencies" файла package.json от Grunt? Это было бы круто :)
Jelmer
1
Спасибо! Vagrant должен указать это в своей официальной документации для Windows. Все мои очки принадлежат вам.
htxryan
1
Спасибо, вы спасли мой день, я боролся с 1 дня
Манджунат Сиддаппа
6

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

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

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

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

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

VBoxManage getextradata YOURVMNAME enumerate

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

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

matiangul
источник
3

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

  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

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

хао
источник
1

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

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

Lorem Monkey
источник
0

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

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

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

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

Эду Руис
источник
0

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

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

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

Мелисса
источник