webpack --watch未编译已更改的文件

alc*_*edo 83 javascript fsevents webpack

我尝试运行webpack --watch并在编辑我的JS文件后,它不会触发自动重新编译.

我已经尝试重新安装webpack使用npm uninstall但它仍然无法正常工作.

有任何想法吗?

cdv*_*vel 80

如果您的代码没有被重新编译,请尝试增加观察者的数量(在Ubuntu中):

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

资料来源:https://webpack.github.io/docs/troubleshooting.html

  • 为我工作(Ubuntu),谢谢;) (4认同)
  • 我建议之前检查手表的数量,以确保它没有增加(给你一个想法,如果这可以解决问题):即`sudo sysctl -a | grep max_user_watches` (3认同)

Ben*_*her 65

仅供参考:OS X似乎可以让文件夹损坏并且不再为自己和任何子文件夹发送fsevents(watchpack/ chokidar/ Finder使用).我无法确定这是发生在你身上的事情,但这对我和同事来说非常令人沮丧.

我们能够重命名损坏的父文件夹,然后按预期立即观察事件.有关详细信息,请参阅此博客文章:http://feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai

以上链接的建议修复方法是:

  • 重新启动计算机
  • 通过"磁盘工具"检查磁盘并修复权限
  • 将文件夹添加到Spotlight隐私列表(文件夹列表不要索引),然后从中删除,有效地强制重建索引
  • 重命名文件夹,然后可能重命名它
  • 重新创建文件夹并将旧内容移回其中

前两个对我们没有用,没有尝试Spotlight建议,重新创建并不是必要的.

我们能够通过打开Finder并在每个连续的父文件夹中创建文件来找到根问题文件夹,直到立即出现(因为Finder也会受到这个bug的影响).不更新的最根文件夹是罪魁祸首.我们只是mvmv它拿回原来的名字,然后观察者工作了.

不知道是什么导致腐败,但我很高兴有一个修复.

  • 我将〜/ Sites文件夹重命名为其他内容,然后返回〜/ Sites并修复了错误.它还修复了其他项目的其他几个错误.谈论用1块石头杀死2只鸟.非常感谢!!! (2认同)

Cod*_*ggs 30

将以下代码添加到我的webpack配置文件中为我解决了这个问题,希望这会有所帮助.不要忘记忽略你的node_modules文件夹,因为这会破坏HMR(热模块替换)的性能:

watchOptions: {
  poll: true,
  ignored: /node_modules/
}
Run Code Online (Sandbox Code Playgroud)

  • @Lokesh webpack 可以监视文件并在文件更改时重新编译。默认情况下,监视模式是关闭的,因此 `watch: true` 也可以正常工作。轮询是通过一个程序或设备不断检查其他程序或设备以查看它们处于什么状态,通常是查看它们是否仍然连接或想要通信。所以设置 `poll: true` 允许 webpack 检查你的程序的状态,看看是否有任何更改,或者至少我假设正在发生什么。 (2认同)

Chr*_*ris 22

我在使用WebStorm时遇到过这个问题.

禁用设置 - >系统设置 - >"安全写入"解决了它.

在以下位置找到了建议:WebPack故障排除


Les*_*Les 14

只是为了添加可能的解决方案:我将项目文件夹放在Dropbox文件夹中,将其移出来解决了我的问题.(OS X)

  • 你知道为什么会这样吗?@Les (2认同)

Lia*_*rne 9

一个问题是,如果您的路径名称不是绝对的,那么这样的事情就会发生.我不小心设置resolve.root./而不是__dirname这导致我浪费了大量时间删除和重新创建像我上面的人一样的文件.


小智 8

如果通过César将fs.inotify.max_user_watches更改为pointend仍然无效,请尝试使用轮询而不是本机观察者,方法是创建脚本,如文档中所示或使用--watch --watch-poll选项运行webpack .


Alb*_*ira 8

在Laravel Homestead为我工作

--watch --watch-poll
Run Code Online (Sandbox Code Playgroud)


小智 7

文件夹区分大小写是我的问题。我对require()的代码调用具有所有小写的路径名,但是实际目录中有一个大写字母。我将所有目录重命名为小写,并且可以立即观看Webpack。


alc*_*edo 6

更新:删除整个目录并从repo重新克隆克隆修复了我的问题.

  • 但这一定是有原因的 (4认同)

ros*_*eld 6

如果您使用的是Vim,则应尝试将backupcopy设置为yes而不是默认auto.否则Vim有时会重命名原始文件并创建一个新文件,这将搞乱webpack watch:

https://github.com/webpack/webpack/issues/781

如果是这种情况,只需将其添加到您的vim设置:

set backupcopy = yes


小智 6

请注意,如果您在虚拟机(Vagrant/Virtualbox)中运行webpack并在主机平台上更改文件,则共享文件夹中的文件更新可能不会在Ubuntu上触发inotify.这将导致webpack无法获取更改.

请参阅:Virtualbox票证#10660

在我的例子中,在de guest(在vi中)编辑和保存文件确实触发了webpack.在主机上编辑它(在PhpStorm,记事本或任何其他应用程序中)dit不会触发webpack无论我做什么.

我通过使用vagrant-fsnotify解决了它.

  • 虽然我使用 `vagrant-notify-forwarder` 来实现更多魔法重载 (2认同)

Pau*_*ann 5

我在 .vue 文件上遇到了同样的问题。当服务器重新启动时一切正常,但在下一次保存时它不再重新编译。问题出在一个字母大写的导入文件路径上。很难解决这个问题,因为一切都在服务器重新启动时进行。检查路径的大小写。


Mik*_*eel 5

它不是为我重新编译,但后来我意识到/记得 webpack 监视依赖关系图而不仅仅是一个文件夹(或文件)。果然,我正在更改的文件还不是该图表的一部分。