在虚拟机共享目录中安装 npm 模块和 grunt 问题

问题描述 投票:0回答:2

我正在尝试构建一个开发环境,但 npm 给我带来了问题。这是我的场景:

我有一台运行 Windows 和 VMWare Player 的开发计算机。我有一个 Ubuntu Server VM(无 UI),配置了 Apache、PHP、NodeJS 等。由于 VM 没有 UI,我想使用主机操作系统进行开发。我设置了一个共享目录,在虚拟机中可通过 /mnt/hgfs/source/ 进行访问。

当我尝试在此目录中运行

npm install
时,问题就出现了。我看到很多类似
Error: UNKNOWN, symlink '../requirejs/bin/r.js'
的错误。我知道我的 package.json 文件没问题,因为如果我将所有文件从共享中复制到常规 unix 目录 (/var/www/)
npm install
就可以正常工作。所以 npm 在共享目录中安装模块时出现问题。

我以为我可以通过全局安装节点包来解决这个问题,但是,无论出于何种原因,GruntJS 爱好者不喜欢这样并且它必须存在于本地。然后我尝试创建一个从全局到本地的 npm 链接,但这只会导致一个新错误:

Error: May not delete: /usr/lib/node_modules/grunt
。我对 /usr/lib/node_modules 目录和所有子目录拥有完全权限。

我真的不想在虚拟机中使用命令行文本编辑器编写整个项目,但看起来我无法通过 VMWare 将我的代码库放在主机和来宾操作系统都可用的目录中。

我非常感谢任何关于如何 1) 允许 npm 模块安装在我的共享目录中,2) 全局运行 Grunt,或 3) 解决我看到的 npm 链接错误的建议。

编辑:发布此内容后不久,我意识到这里的根本问题 - 当主机操作系统是 Windows 时,不可能在 VM 共享目录中创建符号链接。由于 npm install 默认使用符号链接,因此它不起作用,这就是为什么接受的解决方案确实有效。

node.js gruntjs npm vmware
2个回答
6
投票

尝试以下操作:

npm install --no-bin-links

Grunt 应该是本地的,因为插件和

gruntfile.js
可能需要特定版本的 Grunt 才能运行您的任务。如果其他开发人员想要运行您的任务,他们只需发出
npm install
即可完成设置。 (有关更多信息,请参阅 this。)
grunt-cli
是全局的,用于运行本地版本的
grunt


0
投票

另一个选项是允许虚拟机创建链接。我不知道 VMWare,但当我最终在这个主题上寻找 VirtualBox 下的相同问题时,这是我对该软件的解决方案。

假设您的虚拟机标记为

MyVM
,您的共享目录标记为
myshared
。然后在控制台中输入:

VBoxManage setextradata MyVM VBoxInternal2/SharedFoldersEnableSymlinksCreate/myshared 1

重新启动 VirtualBox 的虚拟机就可以了!

© www.soinside.com 2019 - 2024. All rights reserved.