我需要在Windows上的Vagrant中安装Bower,我需要哪些权限?

12
我在 Windows 7 计算机上通过 NPM 安装 Bower 时,在运行着 Vagrant 上的 precise32 Ubuntu Box 中遇到了这个错误。我尝试使用各种命令组合,但总是出现相同或非常相似的错误。
尝试本地安装、全局安装、使用 sudo 或不使用 sudo 等等。
...
npm ERR! Error: EPERM, open '/home/vagrant/tmp/npm-1214-AHbOCwuM/1391873680685-0.36021817452274263/package/build/node_modules/cheerio/node_modules/htmlparser2/node_modules/readable-stream/test/simple/test-stream2-readable-empty-buffer-no-eof.js'
npm ERR!  { [Error: EPERM, open '/home/vagrant/tmp/npm-1214-AHbOCwuM/1391873680685-0.36021817452274263/package/build/node_modules/cheerio/node_modules/htmlparser2/node_modules/readable-stream/test/simple/test-stream2-readable-empty-buffer-no-eof.js']
npm ERR!   errno: 50,
npm ERR!   code: 'EPERM',
npm ERR!   path: '/home/vagrant/tmp/npm-1214-AHbOCwuM/1391873680685-0.36021817452274263/package/build/node_modules/cheerio/node_modules/htmlparser2/node_modules/readable-stream/test/simple/test-stream2-readable-empty-buffer-no-eof.js' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! System Linux 3.2.0-23-generic-pae
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "-g" "bower" "--no-bin-links"
npm ERR! cwd /home/vagrant
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.24
npm ERR! path /home/vagrant/tmp/npm-1214-AHbOCwuM/1391873680685-0.36021817452274263/package/build/node_modules/cheerio/node_modules/htmlparser2/node_modules/readable-stream/test/simple/test-stream2-readable-empty-buffer-no-eof.js
npm ERR! code EPERM
npm ERR! errno 50
npm ERR! stack Error: EPERM, open '/home/vagrant/tmp/npm-1214-AHbOCwuM/1391873680685-0.36021817452274263/package/build/node_modules/cheerio/node_modules/htmlparser2/node_modules/readable-stream/test/simple/test-stream2-readable-empty-buffer-no-eof.js'
...

编辑: 除了下面的回答外,请注意在使用Windows时的文件目录+文件大小限制(我认为是260个字符)

我不得不将vagrant安装在我的c:/驱动器上的一个文件夹中,以克服这个限制,因为有些软件包会有嵌套依赖项,导致超出此限制。 我的问题出在grunt-contrib-less上。

4个回答

14

自问自答,因为在StackOverflow上无法找到解决方案

最终通过使用su root切换到root用户并再次尝试全局安装来使其工作。显然仅仅使用sudo是不够的。

所以变成了

root@precise32: npm install -g bower --no-bin-links

编辑:请注意,在Windows上使用时有文件目录和文件大小限制(我相信是260个字符)

我必须在我的c:/驱动器直接初始化一个vagrant实例来克服这个限制,因为一些软件包最终会产生嵌套依赖项,导致超过此限制。我的问题出现在grunt-contrib-less 上

编辑2:由于一再遇到这个问题,我在这里为大家添加一些关于在Windows下使用node模块和vagrant的更多信息。

我现在通过在package.json中添加任何长依赖链来克服文件路径限制,这些依赖链因路径长度而失败(通常是EPERM)。这意味着如果已经安装了深层树中的软件包,则不会在更深的地方重新安装软件包。

只要确保使用的版本符合模块的版本字符串即可。

package.json中的依赖项顺序无关紧要,在安装任何内容之前都会解析依赖项


感谢您。解决我所有困扰的方法是将虚拟机文件夹移动到硬盘根目录以避免长文件名。人们可能会认为NPM的开发人员至少会承认Windows的存在并编写详细的错误消息,但是没有。 - Swader
Windows上的错误是由于路径过长导致的。最好的解决方案是将文件夹移动到较低的层级。 - jordiburgos
这并不总是如此,但如果在Windows上出现EPERM或EACCESS(我想)错误,那么这可能是您应该首先检查的第一件事。 - Sam

3

我们的一位IT运维同事(来自Vagrant和Node.js快速技巧)已经找到了解决问题的方法。基本上,您需要在Vagrant文件中添加以下代码:

config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]

这将允许npm为需要它的模块创建符号链接。 然后安装包而不强制使用符号链接。因此,在通过vagrant创建的虚拟机上运行npm install时,请按如下方式运行:

sudo npm install --no-bin-link

当我安装express模块时,它对我很有用。


我认为这实际上是由于权限错误,但我仍然无法弄清原因。不过谢谢,这很有用。 - Sam
添加后,我收到了错误提示:* 不应存在以下设置:自定义 - Felix Eve
@FelixEve 你需要用以下代码包裹起来: [在新的缩进行中添加 config.vm.customize] end``` - chrki

1

在Windows上使用Vagrant 1.5,现在您可以使用rsyncsmb文件夹共享,这样就不会有这个问题了。


1
为了避免Windows中260个字符的文件长度限制,而npm似乎很容易超过这个限制,您可以使用npm link命令。这将允许您使用本地项目的node_modules。如果在客机上运行它,它将在客机上全局安装它们,然后在您的项目node_modules文件夹中创建符号链接。这样只有符号链接被共享到Windows主机机器,而不会超过260个文件长度限制。我在这篇博客文章here中详细介绍了这一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接