在Windows共享上安装软件包时出现Npm错误


52

我在Windows 8主机上以VMware guest虚拟机的身份运行Ubuntu 12.10。

我已经在Windows 8主机上共享了一个文件夹,该文件夹在启动时使用以下项输入到Ubuntu来宾中fstab

//myhost/work /work cifs credentials=/home/user/.smbcredentials,noserverino,nounix,uid=user,gid=user,file_mode=0777,dir_mode=0777 0 0 

共享可以正常工作,并且可以由诸如nginx之类的网络服务器提供服务。

但是,当我使用npm安装node.js软件包时似乎出现了问题,出现了很多这样的错误:

user@ubuntu:/work/test$ sudo npm install grunt
npm http GET https://registry.npmjs.org/grunt
npm http 304 https://registry.npmjs.org/grunt
...
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash'
npm ERR! error rolling back  grunt@0.4.1 { [Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/work/test/node_modules/grunt/node_modules/lodash' }
npm ERR! Error: UNKNOWN, symlink '../which/bin/which'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path ../which/bin/which
npm ERR! code UNKNOWN
npm ERR! errno -1
npm ERR! Error: ENOENT, chmod '/work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! fstream_finish_call chmod
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:305:19
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/minimatch/test/basic.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/glob/test/00-setup.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
...
npm ERR! not ok code 0
user@ubuntu:/work/test$ 

是什么导致此问题?在命令行,我能chmodrmdir其中使用sudo没有任何问题的其他事情。

Answers:


118

与运行--no-bin-links固定对我来说:

npm install --no-bin-links

--no-bin-links告诉npm不要创建任何符号链接。(据我所知)没有将符号链接转换为Windows共享的方法。


15
希望我能再投票200次。这样就可以在Windows上使用Vagrant。
克林特(Clint)

1
npm install --no-bin-link也可以。
JamieJag

2
好答案!但是,有没有一种方法可以使它与Grunt的package.json文件的“ devDependencies”一起使用呢?那
太好了

1
谢谢!Vagrant应该将此放在其Windows的正式文档中。我所有的观点都属于你。
htxryan 2014年

1
谢谢您,您保存了我的一天,我从第一天开始就在挣扎中
Manjunath Siddappa

6

如何在Windows上创建符号链接,此页面对我有很大帮助,这说明即使共享文件夹可写,这种情况也会发生。

要修复它,您需要在VirtualBox中启用符号链接功能。

在cmd提示符下运行:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

然后通过以下方式验证:

VBoxManage getextradata YOURVMNAME enumerate

如果您的用户属于Administrators组,则使用“以管理员身份运行”启动VirtualBox!

默认情况下,Windows 7安全策略不允许创建符号链接,因为它是潜在的安全威胁。运行“ secpol.msc”并导航到“本地策略-用户权限分配”,并将您的用户添加到“创建符号链接”。我没有尝试过,但是可能是在那个virtualbox可以以普通用户身份运行之后。


3

同意lorem,但这还不够。

  1. 在Windows上以“管理员”身份运行Virtualbox。

  2. 确保您执行了: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

用您的值替换YOUR_VM和YOUR_SHARED_FOLDER。您可以通过以下方式检查该值:VBoxManage.exe getextradata boot2docker-vm enumerate

没有追踪此问题的virtualbox错误


1

如果您以管理员身份启动VirtualBox,则较新版本的VirtualBox应该允许符号链接(右键单击:以管理员身份运行)。

这同样适用于无所事事的盒子:只需以admin身份运行cmd.exe / PowerShell即可。


0

此npm问题 @drmyersii中提供了一个很好的解决方案,我只复制粘贴不链接答案即可。

真正的解决方案是将配置设置为允许Vagrantfile中Windows主机上的符号链接。这是一个示例(假设您在VirtualBox中运行它):

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
end

这对我很好,现在我可以在scotchbox中使用gulp了


0

对我来说,这些答案都不起作用。我不确定为什么,但是我相信这是因为我的股份是nfs。因此,即使以管理员身份运行并更改setextradata设置,我也无法允许符号链接。我与一饮而尽工作,似乎其他一些包有问题 服从 --no斌链接。仍然试图创建一些符号链接,但显然失败了。最终,Github上的这个线程将我引导到一个“解决方案”中,这可能是很棘手的。我“简单地”将项目安装在非共享文件夹中,并将其设置为我的NODEPATH。

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

需要注意的是,它将影响整个服务器以及更新/更改包装的工作流程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.