Nodejs + npm,在ntfs分区上安装模块

时间:2011-11-22 19:45:01

标签: node.js ubuntu symlink ntfs npm

安装npm模块时遇到问题。 NodeJS安装在Windows主机上的Virtual Box上运行的Ubuntu 11.10上。我的项目文件在NTFS分区上(我必须与windows共享它们)。当我尝试安装一些npm模块时,我收到一个错误,并且没有安装模块。我发现当npm尝试创建符号链接时会出现问题。

可能你不能在NTFS分区上创建符号链接,当我在Linux文件系统中安装模块时,一切正常。

我该如何解决这个问题?我不想手动解决依赖关系:/

7 个答案:

答案 0 :(得分:55)

从版本1.2.21开始,npm为install命令提供了一个新选项。 --no-bin-links

您可以使用if来安装特定节点模块

npm install express --no-bin-links

以及package.json安装

npm install --no-bin-links

使用此选项,我已经能够在VM内部的共享forlder中安装许多npm模块而没有问题(Ubuntu guest,Windows Host)

将选项添加到npm代码的提交是b4c58617039c21c10889a9869f8e86a23e17d3a0

答案 1 :(得分:5)

试试这个 - http://ahtik.com/blog/2012/08/16/fixing-your-virtualbox-shared-folder-symlink-error/

适合我!

基本上你设置了一个参数

  

VBoxManage setextradata YOURVMNAME VBoxInternal2 / SharedFoldersEnableSymlinksCreate / YOURSHAREFOLDERNAME 1

然后以管理员身份运行VM ....

答案 2 :(得分:5)

符号链接权限或--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

答案 3 :(得分:3)

我很确定无法在共享驱动器(“共享文件夹”)上创建符号链接。使用Windows主机和Linux来宾更加不可能。

主机计算机无法识别来宾的文件系统。来宾机是主机的黑盒子。当主持人不知道/etc/...的位置时,您无法向主持人“这个链接到/etc说出来。)

所以简而言之:遗憾的是没有。


更详细一点:

如果我错了,我会很高兴的!这是我开发过程中的一个主要痛苦。

我尝试了很多选择。默认情况下,“共享文件夹”使用的文件系统为vboxsf,如果与samba(Windows的默认网络共享协议)不同,则为:

  1. 我尝试使用本机Windows网络共享,然后将网络驱动器安装在guest虚拟机中,因为guest虚拟机和主机位于同一网络上。 问题仍然存在
  2. 我尝试在Windows上运行NFS服务器(Hanewin NFS服务器)以及SFU / SUA(Windows Services for UNIX),但这有 GIT锁的问题。可能还有其他问题 - 这是一段时间以前,我不清楚记得
  3. 我尝试了反过来:将虚拟机上的目录共享到Windows。但这是愚蠢,因为所有文件都在虚拟机上并且在Windows上访问的速度非常慢
  4. 我是愚蠢的,虽然“好吧,让我们在Windows和Linux上安装虚拟驱动器” - 不要试试这个,破坏虚拟磁盘。我应该知道的事情。
  5. 除了sambanfs之外,可能还有一个网络共享协议,它可能会在尝试创建“符号链接”时复制文件?我真的不知道。

    但是我还没有找到一个并且“锁定”似乎是文件系统本身的任务所以我怀疑任何网络协议(除非有某种专用的注册表对于锁)可以做到这一点。

答案 4 :(得分:1)

对于在尝试npm install --no-bin-links后仍然遇到此问题的任何人。

当我遇到使用VirtualBox在Windows 7主机上的Laravel Homestead Vagrant框上运行npm install的类似问题时,我无法获得上述任何解决方案。来宾框具有Windows文件系统的映射目录。

问题是导致各种错误消息和包安装失败。与该问题最相关的是npm ERR! UNKNOWN, symlink '<some filename>'

为了解决这个问题,我能够在Windows上的Git bash命令行上成功运行npm install,而不是在来宾Linux上进行bash。

为此,您需要安装Git for Windows和NodeJS(都在Windows机器上)。

e.g。

  1. 安装Chocolatey 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
  7. 一切似乎都安装成功。

答案 5 :(得分:0)

如果您不使用本机模块(从C / C ++编译),您可以在Ubuntu VM上使用npm并将node_modules文件夹复制到Windows驱动器。

答案 6 :(得分:0)

fsutil行为集SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1

此命令在Windows上启用符号链接。为了更好地解释最终访问时的神秘命令:How do I overcome the "The symbolic link cannot be followed because its type is disabled." error when getting the target of a symbolic link on Server 2008?

摘要

fsutil行为集的行为代码SymlinkEvaluation - 即L2L,L2R,R2L和R2R - 表示以下内容:

L代表“Local”,R代表“Remote”(谁会砰的?) FIRST L或R - 在2之前 - 指的是相对于访问链接的机器的链接本身(与其目标相对)的位置。 SECOND L或R - 在2之后 - 指的是链接目标相对于LINK本身所在机器的位置。