我试图运行npm install并继续获取权限错误,无论我是否以管理员身份运行它。我的环境规格如下。
Windows 7
Virtual Box 5.1
Vagrant 2.0.1
Homestead Box
NPM 5.5.1
NODE 8.9.1
我已经搜索了不同的支持网站,并尝试了建议的修复程序,但我总是得到一个与错误权限相关的新问题:
npm ERR! ETXTBSY: text file is busy, rmdir
要么
npm ERR! Error: EPERM: operation not permitted,
我使用命令`npm install --no-bin-links',它仍然无法正常工作。
sudo npm install --no-bin-links
npm ERR! path /home/vagrant/Code/project/node_modules/sum-up
npm ERR! code EPERM
npm ERR! errno -1
npm ERR! syscall rename
npm ERR! Error: EPERM: operation not permitted, rename '/home/vagrant/Code/project/node_modules/sum-up' -> '/home/vagrant/Code/project/node_modules/.sum-up.DELETE'
npm ERR! { Error: EPERM: operation not permitted, rename '/home/vagrant/Code/project/node_modules/sum-up' -> '/home/vagrant/Code/project/node_modules/.sum-up.DELETE'
npm ERR! cause:
npm ERR! { Error: EPERM: operation not permitted, rename '/home/vagrant/Code/project/node_modules/sum-up' -> '/home/vagrant/Code/project/node_modules/.sum-up.DELETE'
npm ERR! errno: -1,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'rename',
npm ERR! path: '/home/vagrant/Code/project/node_modules/sum-up',
npm ERR! dest: '/home/vagrant/Code/project/node_modules/.sum-up.DELETE' },
npm ERR! stack: 'Error: EPERM: operation not permitted, rename \'/home/vagrant/Code/project/node_modules/sum-up\' -> \'/home/vagrant/Code/project/node_modules/.sum-up.DELETE\'',
npm ERR! errno: -1,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'rename',
npm ERR! path: '/home/vagrant/Code/project/node_modules/sum-up',
npm ERR! dest: '/home/vagrant/Code/project/node_modules/.sum-up.DELETE' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/vagrant/.npm/_logs/2018-01-23T19_51_11_713Z-debug.log
在我的情况下,不确定如何,但似乎外部Windows服务锁定了部分npm文件。所以我不得不在我的流浪汉中安装一个外部文件夹(这是我的项目之外),并且不能直接在Windows中看到,并将此文件夹用作npm node_modules文件夹:
sudo mkdir /node_modules && sudo chmod 777 /node_modules
sudo mount --bind /node_modules /vagrant/real_path_to_your_app/node_modules
还要在/ etc / fstab中添加以下行:
/node_modules /vagrant/real_path_to_your_app/node_modules none bind 0 0
然后从/ vagrant / real_path_to_your_app中执行:
/vagrant/real_path_to_your_app$ sudo npm install --save your_module
它对我有用 - 实际上使用挂载目录/ node_modules。
底层问题与Virtualbox共享如何处理Windows文件锁定有关。无论使用标准共享文件夹(vboxsf)还是nfs,都会发生这种情况。如果在npm
尝试更改文件时由另一个进程打开或读取(锁定)文件,则整个安装过程将失败。
怎么修:
vagrant up
(和其他命令)。这可确保符号链接正常工作。还有其他方法可以启用符号链接 - 如果您使用其中一个符号链接,请务必使用共享文件夹中的ln -s a b
对其进行测试。如果您仍然遇到上述第2点的问题,您可以使用Process Monitor,过滤到您的vagrant目录,以检测Virtualbox以外的任何进程(VBoxHeadless.exe)的访问。
有了上述原因,我能够毫无问题地成功运行npm install
。