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

50

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

Я поделился папкой на моем Windows 8 Host и монтируется в гостевой 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, я получаю кучу таких ошибок:

[email protected]:/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
[email protected]:/work/test$ 

Что может вызвать эту проблему? Из командной строки я могу chmod , rmdir среди прочего использовать sudo без каких-либо проблем.

    
задан F21 19.03.2013 в 01:12
источник

6 ответов

114

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

npm install --no-bin-links

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

    
ответ дан F21 19.03.2013 в 01:40
источник
6

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

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

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

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Тогда проверьте:

VBoxManage getextradata YOURVMNAME enumerate
  

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

     

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

    
ответ дан matiangul 27.02.2014 в 00:10
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

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

    
ответ дан hao 23.02.2015 в 17:52
1

Новые версии VirtualBox должны разрешать символические ссылки, если вы запустите VirtualBox как Adminstrator (щелкните правой кнопкой мыши: Запуск от имени администратора).

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

    
ответ дан lorem monkey 25.06.2014 в 12:27
0

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

  

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

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

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

    
ответ дан Edu Ruiz 13.08.2015 в 00:01
0

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

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

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

    
ответ дан Melissa 10.11.2015 в 19:09