在运行npm install时出现错误"ETXTBSY: text file is busy"。

34

在Homestead上运行npm install [任何包]甚至是npm install时,我会收到以下错误:

Translated:
当在 Homestead 上运行 npm install [any package] 或者 npm install 时,我会收到以下错误:
npm ERR! ETXTBSY: text file is busy, rmdir '/home/vagrant/valemus-shop-starter/valemus-shop/node_modules/fsevents'

调试日志可以在这里查看。

  • Box 'laravel/homestead' (v3.0.0)
  • Node: v8.2.1
  • NPM: 5.3.0

我尝试删除fsevents目录,但是它不存在。

我该如何解决这个问题?

10个回答

25

当我想要切换到React前端时,我在Windows 10+VirtualBox (VBox)+Vagrant+Laravel Homestead上遇到了同样的问题。

经过长时间的搜索和尝试,这个解决方案对我起作用了,也许它对你也有用。

停止vagrant:

vagrant halt

将以下内容添加到Homestead目录中Vagrantfile的configure部分

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

以管理员身份启动cmd

然后运行vagrant up

接着运行vagrant ssh

进入开发目录

如果有的话,通过rm -rf node_modules/删除node_modules目录

然后运行sudo npm install && npm run dev

整个过程都没有出现任何警告或错误。

这是两小时阅读的结果 :)

编辑:

如果你的问题没有解决,并且你已经设置好了环境,你可以使用另一种解决方案:

在Windows机器上安装Node

然后进入你的开发目录,从Windows上运行npm install,你会得到相同的结果。

之后你也可以从Windows cmd中启动npm run watch

这帮助我减轻了虚拟机的负担,让Windows来处理npm run watch并在Windows上接收通知。

干杯!


这对我不起作用,但错误并不重要。在npm install之后,我可以正常运行gulp - Martijn Imhoff
1
在执行这些步骤之前,需要更新Node $ sudo npm install n -g$ sudo n stable - Sadee
1
有与此处所述相同的设置,但无法使其正常工作 - 不得不在 Windows 上使用 npm。 - aknosis
1
如果上述方法无效,您可以执行以下命令:$ sudo yarn install,然后再 $ npm run dev,这样就不会出现任何问题。 - Dehost

13

我把 npm 版本降级到了 5.7.1,问题得以解决。

使用的命令是:npm install -g npm@5.7.1

我正在使用 Win10、Vagrant、Ubuntu v14.04 和 Node v8.11.4。


1
这对我有用,谢谢!Windows 10,Vagrant,CentOs 7.5。您知道为什么使用更新版本会出现这些错误吗? - false_azure
1
也适用于我!在Windows 8.1上运行的Vagrant中的CentOS 7。我通过使用nvm降级到npm版本6,问题消失了。 - Hasan Akhtar
在 Vagrant scotch-box-pro 上适用,对我有用。 - Peter

10
在 Windows 上执行 "npm install" 命令,而不是在 Homestead 上执行。当然,您需要已安装适用于 Windows 的 npm。

作者的操作系统不是Windows。 - cnnr
4
好的,我的意思是在主机操作系统中执行 "npm install",而不是在虚拟机操作系统中执行。这解决了我遇到的问题。但对于全局包,您需要在虚拟机操作系统中执行 "npm install -g {package}"。 - Wilson Wang
感谢 @WilsonWang,确实需要在主机上运行 npm installnpm run dev 同理。 - trogne
2
问题在于,如果您计划在客户操作系统上实际使用 Node(用于构建工具等),那么现在需要确保您的主机和客户操作系统之间的 Node 版本匹配。 - Jake Wilson
糟糕!我删掉了我的node_modules,强制清除了缓存,几乎重新安装了整个node,直到我意识到我在ssh中。感谢你节省了更多浪费的时间。 - Erin

8

我也遇到了同样的问题。

我的操作系统是Linux。

fsevents模块专为Mac设计。

请尝试执行以下命令:

npm install --no-optional


8

我在使用Homestead的Windows 10电脑上遇到了这个问题很多次。经过很多努力,我用以下方法解决了它;

删除你的node_modules文件夹。

你可以在Windows终端上运行以下命令:

npm install --no-bin-links (After some experience it is necessary for virtual machines)
npm rebuild --no-bin links

通常在执行这些命令后,它可以正常工作,但如果出现以下错误:

"Node Sass could not find a binding for your current environment:"

请在您的 Homestead 终端上运行以下命令以安装适用于 Linux 的 Node Sass。

npm rebuild node-sass

如果不起作用,尝试使用yarn。删除node_modules文件夹、package.json.lock和yarn.lock(如果有)文件,然后输入以下命令:

yarn install

如果它们都无法解决您的问题,请在虚拟机之外使用所有npm命令。 它会起作用的。
希望这可以帮助您...

7
即使按照以下步骤操作,我仍然遇到错误:
  config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, 
     "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
  end

根据Babak Bandpey的建议:

原来还有另一个令人烦恼的问题,即文件路径字符限制。如果您正在使用名称很长的节点模块,则经常会出现这种情况。您可以通过在vagrant ssh到linux虚拟机后按照以下步骤轻松解决此问题:

  1. 在您的主目录下创建'node_modules'文件夹 mkdir ~/node_modules

  2. 将符号链接添加到刚刚在项目文件夹中创建的'node_modules'文件夹中

    ln -sf ~/node_modules /vagrant/your-project-folder

这个解决方案将确保所有节点模块存储在主目录中而不是同步文件夹中。原始来源:https://blog.rudylee.com/2014/10/27/symbolic-links-with-vagrant-windows/

希望它能帮助遇到类似问题的人,谢谢!


3

我也曾遇到过“npm install”的问题,我使用的是Windows 10。 终于我把它解决了,我的做法是退出“vagrant ssh”,然后运行“vagrant box update”,然后“npm install”就起作用了。请注意,我在“vagrant ssh”之外运行了“vagrant box update”和“npm install”。希望能有所帮助。


3

我也在为这个问题苦苦挣扎,但是下面是解决方法:

  1. 确保将node更新到最新版本

要更新,请安装n

sudo npm install -g n

然后只需执行以下操作:
sudo n latest
  1. 设置Node脚本在各个平台上使用环境变量

在vagrant中运行:

npm install --save-dev cross-env
npm install 
npm run dev 

解决了问题,虽然我花了一整天的时间找到正确的解决方案(https://www.npmjs.com/package/cross-env)。


1
我需要先删除 node_modules 文件夹,然后执行以下操作:
sudo chmod a+x .

为了确保我拥有在机器上执行任何操作的特权,那么我需要...
sudo npm install --no-bin-links

根据我的经验,在Vagrant中不需要二进制链接,因为这些虚拟机不支持二进制链接(如果我说错了,请纠正我)。然后我只是...
sudo npm run dev

此时,一些人可能会遇到没有找到cross-env的错误。在这种情况下,只需删除package.json文件中的cross-env并再次运行即可。这对我有用,但一些人仍然遇到相同的问题。值得一试。


在执行这些步骤之前需要更新Node $ sudo npm install n -g$ sudo n stable - Sadee
“sudo chmod a+x .” - 我需要在哪个目录下操作?是在 node_modules 的上级目录还是在 node_modules 内部? - realtebo

0
我遇到了一个与你类似的问题,@AzharKhattak,只是它发生在一个提供了一个带有共享/Dev文件夹的Debian会话的Virtualbox上,这个文件夹也存在于Windows主机上。
然而,在我的情况下,操作是:
$ sudo ln -sf ~/node_modules /Dev/myproject/node_modules/

失败并附带一条信息:
ln: failed to create symbolic link '/Dev/myproject/node_modules/node_modules': Operation not permitted

我不得不将我的项目移动到一个完全不共享的目录中,即我为它创建的/Devout目录。

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