在Windows上安装Bower on Vagrant需要什么权限?

时间:2014-02-08 15:47:35

标签: windows node.js npm vagrant bower

在Vagrant上运行精确32 Ubuntu Box的Windows 7计算机上通过NPM安装Bower时,我一直遇到此错误。我尝试了每个命令组合,总是得到相同或非常相似的错误

使用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个字符)

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

4 个答案:

答案 0 :(得分:14)

自我回答,因为我无法在StackOverflow上的任何其他地方找到解决方案

我最终通过su root更改为root用户并尝试再次全局安装来使其工作。显然只是使用sudo还不够。

所以它变成了

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

编辑:除此解决方案外,请注意使用Windows时的文件目录+文件大小限制(我相信260个字符)

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

编辑2 :一次又一次遇到此问题后,我会在此处为人们添加有关Windows下节点模块和流浪者的更多信息。

我现在通过放置由于路径长度而失败的任何长依赖链(通常是EPERM)来克服文件路径限制我将链中的一个包添加到我自己的package.json中。这意味着长需求链是分开的,因为如果已经安装了npm,则不会在树中更深地重新安装包。

请确保您需要的版本对模块的版本字符串有效。

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

答案 1 :(得分:3)

其中一个操作员(vagrant and node.js quick tip)找到了解决该问题的方法。基本上,您需要在Vagrant文​​件中包含以下代码:

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

这将允许npm为需要它的模块创建符号链接。 比安装包而不强制符号链接。因此,在通过vagrant创建的虚拟机上运行npm install时,请将其运行为:

sudo npm install --no-bin-link

当我安装快递时,它对我有用    模块。

答案 2 :(得分:1)

在Windows上使用Vagrant 1.5,您现在可以使用不会出现此问题的rsyncsmb文件夹共享。

答案 3 :(得分:1)

要在Windows中解决260个字符的文件长度限制,npm似乎很容易超越,您可以使用npm link命令。

这将允许您使用项目本地的node_modules。如果在客户机上运行它,它将在客户机上全局安装它们,然后在项目node_modules文件夹中创建符号链接。这样,只有符号链接被共享到Windows主机,并且不会超过260文件长度限制。

我在此博文here中详细介绍了这一点。