Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

npm install express --no-bin-links

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

npm install --no-bin-links

С помощью этой опции мне удалось установить множество модулей npm без проблем в моем общем forlder внутри VM (гостевой Ubuntu, Windows Host)

Конец, в который был добавлен параметр в код npm, b4c58617039c21c10889a9869f8e86a23e17d3a0

Ответ 2

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

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

В основном вы устанавливаете параметр

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

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

Ответ 3

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

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

Ответ 4

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

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

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


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

Я был бы счастлив, если бы ошибся! Это серьезная боль в моем процессе разработки.

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

  • Я попытался использовать собственный сетевой доступ Windows, а затем установил сетевой диск в гостевой системе, поскольку гость и хост находятся в одной сети. Проблема все еще была.
  • Я попробовал запустить сервер NFS на windows (Hanewin NFS Server) вместе со SFU/SUA (Windows Services для UNIX), но это имеет проблемы с GIT locks, Вероятно, и другие проблемы - это было давно, и я не помню, чтобы я помнил
  • Я попробовал обратное: обмен каталогами на виртуальной машине с окнами. Но это глупо, поскольку все файлы будут находиться в виртуальном ящике и значительно медленнее для доступа к окнам
  • Я был глупым, и я, хотя "хорошо допустил монтирование виртуального диска на обоих окнах и Linux" - не пытайтесь это, развращает виртуальный диск. Что-то я должен был знать.

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

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

Ответ 5

Для тех, у кого еще есть эта проблема после попытки 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, а не bash на гостевом Linux.

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

например.

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

Все, кажется, успешно установлено.

Ответ 6

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

Ответ 7

набор функций fsutil SymlinkEvaluation L2L: 1 R2R: 1 L2R: 1 R2L: 1

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

в целом

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

L означает "Local", а R для "Remote" (кто бы взломал?) FIRST L или R - до 2 - относится к местоположению самой линии (в отличие от ее цели) относительно машины. ДОСТУП К ЛИНИИ. SECOND L или R - после 2 - относится к местоположению целевого объекта связи относительно машины, на которой расположен сам LINK.