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

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

我的 Windows 8 主机上已将 Ubuntu 12.10 作为 VMware 客户机运行。

我已经在 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  [email protected] { [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!     <[email protected]>

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!     <[email protected]>

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!     <[email protected]>

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!     <[email protected]>
...
npm ERR! not ok code 0
user@ubuntu:/work/test$ 

什么原因导致了这个问题?从命令行,我可以chmod使用rmdirsudo 等,没有任何问题。

答案1

运行并--no-bin-links修复了这个问题:

npm install --no-bin-links

--no-bin-links告诉npm不要创建任何符号链接。

有时,对于某些即使使用该--no-bin-links指令也会创建符号链接的软件包,或者在使用该指令导致其他错误的情况下,您可以使用以下命令从显示错误的软件包中删除符号链接:

npm unlink <package>

绝对没有办法将符号链接转换为 Windows 共享。

答案2

如何允许在 Windows 上创建符号链接这一页对我帮助很大,这解释了即使你的共享文件夹是可写的,也会发生这种情况。

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

在 cmd 提示符下运行:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

然后通过以下方式验证:

VBoxManage getextradata YOURVMNAME enumerate

如果您的用户属于管理员组,则使用“以管理员身份运行”启动 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

一个虚拟机错误跟踪此问题。

答案4

这个 npm 问题@drmyersii 给出了一个很好的解决方案,我只会复制和粘贴而不会链接答案。

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

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

这对我来说效果很好,现在我可以使用 gulp苏格兰威士忌

相关内容