Nodejs + npm, установка модулей на раздел ntfs
У меня возникла проблема при установке модулей npm. NodeJS установлен на Ubuntu 11.10, работающем в виртуальной коробке на хосте Windows. Мои файлы проекта находятся в разделе NTFS (я должен поделиться им с окнами). Когда я пытаюсь установить некоторый модуль npm, я получаю сообщение об ошибке, и модуль не установлен. Я выяснил, что проблема возникает, когда npm пытается создать символические ссылки.
Вероятно, вы не можете создавать символические ссылки на разделе NTFS, когда я устанавливаю модуль "внутри" файловой системы Linux, все работает нормально.
Как я могу это исправить? Я не хочу разрешать зависимости вручную:/
Ответы
Ответ 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.