Nodejs + npm, установка модулей на раздел ntfs

У меня проблема при установке модулей npm. NodeJS установлен на Ubuntu 11.10, запущенном на Virtual Box на хосте Windows. Мои файлы проекта находятся в разделе NTFS (я должен поделиться ими с Windows). Когда я пытаюсь установить какой-либо модуль npm, я получаю сообщение об ошибке, и модуль не установлен. Я обнаружил, что проблема возникает, когда npm пытается создать символические ссылки.

Вероятно, вы не можете создавать символические ссылки в разделе NTFS, когда я устанавливаю модуль «внутри» файловой системы Linux, все работает нормально.

Как я могу это исправить? Я не хочу разрешать зависимости вручную: /


person Sosnowski    schedule 22.11.2011    source источник
comment
Я думаю, что у NTFS есть эквивалент символической ссылки, но он может использоваться только администраторами и не так активно используется, как в Linux, поэтому, возможно, драйвер ntfs его не поддерживает.   -  person thejh    schedule 22.11.2011
comment
есть идеи как это исправить?   -  person Sosnowski    schedule 23.11.2011


Ответы (7)


Начиная с версии 1.2.21 в npm появилась новая опция для команды install. --no-bin-links

Вы можете использовать if для установки определенного модуля узла

npm install express --no-bin-links

а также для установки package.json

npm install --no-bin-links

С помощью этой опции я смог без проблем установить множество модулей npm в моем общем форлдере внутри виртуальной машины (гость Ubuntu, хост Windows)

Коммит, в котором параметр был добавлен в код npm, - b4c58617039c21c10889a9869f8e86a23e17d3a0.

person blackjid    schedule 01.03.2013
comment
Это круто! Сосновского, это быстрое решение, которое не требует настройки параметров vbox на каждой рабочей станции, как это было предложено @Mahbub - person antitoxic; 18.03.2013
comment
Это должно быть отмечено как правильный ответ. Я потратил часы на то, чтобы исправить это, и я возился с моим монтированием cifs, думая, что это проблема с разрешением, это исправило ее для меня. - person F21; 19.03.2013
comment
Это отличное решение! - person Jaro; 29.06.2013
comment
Большое спасибо @blackjid - person Chandu; 27.03.2015
comment
Это также влияет на подсистему Windows для Linux, поэтому я рад, что это уже было обнаружено для файловых систем NTFS. - person John Reid; 09.05.2016

Попробуйте это - http://ahtik.com/blog/2012/08/16/fixing-your-virtualbox-shared-folder-symlink-error/

Работает на меня!

Обычно вы устанавливаете параметр

VBoxManage setextradata YOURVMNAME VBoxInternal2 / SharedFoldersEnableSymlinksCreate / YOURSHAREFOLDERNAME 1

А затем запустите виртуальную машину от имени администратора ....

person Mahbub    schedule 04.03.2013
comment
Это все еще показывает мне Error: UNKNOWN, symlink '../coffee-script/bin/cake' после того, как я запустил npm install - person antitoxic; 18.03.2013
comment
Упс - мне нужно было запустить весь VBox от имени администратора. Сейчас я отлично работаю, но все еще немного утомительно запускать это как администратор каждый раз. - person antitoxic; 18.03.2013
comment
Я знаю, что это больно :), вы можете настроить свою виртуальную машину на постоянный запуск от имени администратора. Щелкните правой кнопкой мыши виртуальный ящик ›свойства› Shotcut ›Дополнительно ...› Запуск от имени администратора. - person Mahbub; 18.03.2013
comment
Пробовали бродягу? Проверьте это - github.com/mitchellh/vagrant/issues/713#issuecomment- 4416384 - person Mahbub; 18.03.2013
comment
страница с неработающей ссылкой не найдена ... - person Samuel Rossille; 20.08.2014

Разрешения Symlink или --no-bin-links у нас не работали. Вместо этого мы решили переместить нашу node_modules из доли /vagrant. Мы создали символическую ссылку с /vagrant/node_modules на /tmp/node_modules. Это можно сделать, только если ваш node_modules не находится в системе контроля версий. Сначала проверьте это!

См. Также http://kmile.nl/post/73956428426/npm-vagrant-and-symlinks-on-windows

person Kamiel Wanrooij    schedule 20.01.2014

Я почти уверен, что символические ссылки не могут быть созданы на общем диске («общая папка»). Еще более невозможно с хост-машиной Windows и гостевой ОС Linux.

хост-машины не знают о файловой системе гостей. Гостевая машина - это черный ящик для хоста. Вы не можете сказать хосту «Ну, это ссылается на /etc/...», когда хост не знает, где это /etc :).

Короче говоря: к сожалению, нет.


Более подробно:

Буду очень рад, если ошибаюсь! Это большая проблема в моем процессе развития.

Я столько вариантов перепробовала. По умолчанию "общие папки" используют файловую систему vboxsf, что-то, если не то же самое, что samba (протокол общего доступа к сети по умолчанию для Windows), поэтому:

  1. Я попытался использовать собственный сетевой доступ Windows, а затем подключить сетевой диск в гостевой системе, поскольку гость и хост находятся в одной сети. Проблема все еще существовала.
  2. Я пробовал запустить сервер NFS в Windows (сервер Hanewin NFS) вместе с SFU / SUA (службы Windows для UNIX), но у меня возникли проблемы с блокировками GIT. Возможно, и другие проблемы - это было некоторое время назад, и я точно не помню
  3. Я попробовал обратное: поделился каталогом на виртуальной машине с Windows. Но это глупо, поскольку все файлы будут находиться в виртуальном ящике, а доступ к ним в окнах действительно медленный.
  4. Я был глуп, и я подумал: «давайте смонтируем виртуальный диск как на Windows, так и на Linux» - не пытайтесь это сделать, виртуальный диск будет поврежден. То, что я должен был знать.

Может быть протокол совместного использования сети, отличный от samba и nfs, который, возможно, будет копировать файлы при каждой попытке создания "символической ссылки"? Я правда не знаю.

Однако я еще не нашел его, а также «блокировка», похоже, является задачей самой файловой системы, поэтому я сомневаюсь в каком-либо сетевом протоколе (если только у меня нет специального реестра для блокировок) может это сделать.

person antitoxic    schedule 30.09.2012

Для тех, у кого проблема не исчезла после попытки npm install --no-bin-links.

Мне не удалось заставить работать ни одно из вышеперечисленных решений, когда я столкнулся с аналогичной проблемой при запуске npm install в поле Laravel Homestead Vagrant на хосте Windows 7 с использованием VirtualBox. Гостевой ящик имеет сопоставленный каталог с файловой системой Windows.

Проблема заключалась в появлении различных сообщений об ошибках и сбоях при установке пакета. Самым важным для вопроса был npm ERR! UNKNOWN, symlink '<some filename>'.

Чтобы исправить это, мне удалось успешно запустить npm install в командной строке Git bash в Windows, а не в гостевом Linux.

Для этого вам необходимо установить Git для Windows и NodeJS (оба в вашем Windows).

e.g.

  1. Установите шоколадный https://chocolatey.org/
  2. choco install nodejs.install
  3. choco install git.install
  4. Запустите C:\Program Files (x86)\Git\Git Bash.vbs
  5. В командной строке Git Bash измените каталог на местоположение вашего файла package.json, например. cd /c/projects/projectname
  6. Запустите npm install

Кажется, все успешно устанавливается.

person user679744    schedule 07.07.2015

Если вы не используете собственные модули (скомпилированные из C / C ++), вы можете просто использовать npm на своей виртуальной машине Ubuntu и скопировать папку node_modules на свой диск Windows.

person muffel    schedule 16.04.2012

Набор поведения fsutil SymlinkEvaluation L2L: 1 R2R: 1 L2R: 1 R2L: 1

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

В итоге

Коды поведения для набора поведения fsutil SymlinkEvaluation, а именно L2L, L2R, R2L и R2R, означают следующее:

L означает "локальный", а R - "удаленный" (кто бы мог подумать?) ПЕРВЫЙ L или R - перед 2 - относятся к местоположению самой ссылки (в отличие от ее цели) относительно машины. ДОСТУП по ссылке. ВТОРОЙ L или R - после 2 - относится к местоположению цели ссылки относительно машины, на которой расположена сама LINK.

person newtexie    schedule 03.02.2016