webpack--watch't编译更改的文件

webpack --watch isn't compiling changed files

本文关键字:文件 编译 webpack--watch      更新时间:2023-09-26

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

我尝试过使用npm uninstall重新安装webpack,但仍然无法正常工作。

有什么想法吗?

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

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

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

FYI:看来OS X可能会让文件夹损坏,并且不再为自己和任何子文件夹发送fseventswatchpack/chokidar/Finder使用)。我不能确定这是发生在你身上的事情,但这让我和一位同事非常沮丧。

我们能够重命名损坏的父文件夹,然后观察事件立即按预期进行。查看此博客文章以了解更多信息:http://livereload.com/troubleshooting/os-x-fsevents-bug-may-prevent-monitoring-of-certain-folders/

来自上述链接的建议修复程序是:

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

前两个对我们不起作用,没有尝试聚光灯的建议,重新创作也没有必要。

我们能够通过打开Finder并在每个连续的父文件夹中创建文件来找到根本问题文件夹,直到一个文件立即出现(因为Finder也会被这个错误淹没)。没有更新的最根文件夹是罪魁祸首。我们只是用mvmv把它恢复到原来的名字,然后观察者就工作了。

不知道是什么原因导致了腐败,但我很高兴能找到解决办法。

将以下代码添加到我的webpack配置文件中为我修复了这个问题。不要忘记忽略node_modules文件夹,因为这会影响HMR(热模块更换)的性能:

watchOptions: {
  poll: true,
  ignored: /node_modules/
}

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

禁用设置->系统设置->"安全写入"为我解决了这个问题。

在中找到了这样做的建议:WebPack 故障排除

文件夹大小写敏感性是我的问题。我对require()的代码调用都是小写路径名,但实际上目录中有一个大写字母。我把我所有的目录都重命名为小写,webpack观看立即生效。

只是添加到可能的解决方案中:我把我的项目文件夹放在Dropbox文件夹中,把它移出去为我解决了这个问题。(OS X)

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

如果将fs.inotify.max_user_watches更改为César指定的指针仍然不起作用,请尝试使用轮询,而不是使用本机观察程序,方法是创建文档中显示的脚本或运行具有--watch --watch-poll选项的webpack。

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

请参阅:Virtualbox票证#10660

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

我使用流浪者fsnotify解决了这个问题。

更新:删除整个目录并从repo中重新进行git克隆修复了我的问题。

在Laravel Homestead 为我工作

--watch --watch-poll

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

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

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

如果是这样的话,只需将其添加到你的vim设置中:

set backupcopy=yes

它没有为我重新编译,但后来我意识到/记住webpack监视依赖关系图,而不仅仅是一个文件夹(或多个文件)。果不其然,我正在更改的文件还没有包含在图表中。

我遇到了类似的问题,无论是webpack还是监视模式下的汇总软件都没有捕捉到我所做的更改。我发现这基本上是我的错,因为我正在更改尚未在应用程序中导入的模块(.tsx文件)(例如作为入口点的App.ts),并且我希望构建工具报告我在那里犯下的错误。

对我来说,在VS代码中创建文件夹和文件是个问题。为了解决这个问题,我重新克隆了我的repo,这次通过命令行而不是代码创建了新的文件夹和文件。我认为代码由于某种原因损坏了文件。我看到应用程序刚刚更新,所以这可能是一个新的错误。

在使用Vagrant(2.1.15)和rsync同步的VirtualBox(5.2.18)Ubuntu(18.04)虚拟机中也存在此问题。突然间,第一次构建运行得很好,但Webpack在之后不会考虑这些更改,即使设置了fs.inotify.max_user_watches=524288。在Webpack配置中添加poll: true也没有帮助。

只有vagrant-notify-forwarder工作(由于某种原因,流浪者fsnotify没有工作),但在主机上保存文件后,重建发生得太快,我想rsync没有足够的时间完成任务(可能是因为我的Vagrantfile中有大量同步目录?)。

最后,我通过增加Webpack配置中的aggregateTimeout使手表再次工作:

module.exports = {
  watch: true,
  watchOptions: {
    aggregateTimeout: 10000
  },
  ...
}

如果此解决方案对您有效,请尝试再次降低此值,否则每次点击save时,您将不得不等待10秒,直到构建重新启动。默认值为300毫秒。

我解决此问题的方法是在导入路径中发现大写错误。文件系统上的文件夹的第一个字母小写,导入路径为大写。一切都编译得很好,所以这只是一个webpack手表包含问题。

我也有同样的问题。我注意到它没有编译,因为我的文件夹中包含一些字符(*)。使用旧的观察者插件似乎可以解决这个问题。将此行添加到您的webpack配置文件中。

plugins: [
    new webpack.OldWatchingPlugin()
  ]

我的情况是什么原因:

似乎:max_user_watches的值在/proc/sys/fs/inotify/max_user_watches中正在影响webpack

检查您的实际价值

$cat /proc/sys/fs/inotify/max_user_watches
16384

16384对我来说是不够的。

我尝试了不同类型的解决方案,如:

$ echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

但似乎即使我更改了值,当我重新启动电脑时,它也会回到默认值16384。

解决方案如果你有Linux操作系统(在我的例子中,我有Manjaro):

创建文件:

sudo nano /etc/sysctl.d/90-override.conf

并填充:

fs.inotify.max_user_watches=200000

看起来20万对我来说已经足够了。

创建文件并添加值后,只需重新启动电脑,就可以了。

MacOS上的一个简单解决方案如下:

在项目所在的同一目录中打开两个终端窗口。

在第一个终端窗口中运行:webpack--watch

在第二个终端窗口中运行:webpack dev-server

我尝试了许多可能的解决方案,这似乎是最可靠的

可能的解决方法:将上下文更改为应用程序目录。

我把所有的webpack配置文件都放在一个子文件夹中:

components/
webpack/
 development.js
app.js

webpack/development.js中,设置context: path.join(__dirname, '../')解决了我的问题。

在尝试了一些解决此问题的策略后,我最终放弃了,但在解决另一个问题时,我再次尝试,突然间--watch标志终于起作用了。

老实说,我不知道是什么具体使它工作,但在执行了以下步骤后,它才开始工作:

1. Install most recent gcc version
$ sudo port install gcc48
$ sudo port select --set gcc mp-gcc48
2. Install most recent clang version
$ sudo port install clang-3.6
$ sudo port select --set clang mp-clang-3.6
3. Export variables holding the patch to C and C++ compiler
$ export CC=/opt/local/bin/clang
$ export CXX=/opt/local/bin/clang++

可能发生了这样的情况,在安装这些软件包时,一些依赖项只是增加了拼图中缺失的一块,谁知道呢。。。

希望这能帮助任何在外面挣扎的人,让它发挥作用。

对于我来说,删除node_modules并再次进行npm安装或yarn以安装所有包解决了问题

如果在您的项目中突然发生这种情况,那么这可以解决问题。

也许不知何故,webpack查找的跟踪项目更改的文件已损坏。只需按照简单的步骤,您就可以再次创建它们。

  1. 从您的项目目录中出来。($:cd..)
  2. 将您的项目移动到其他目录($:mv{projectName}{newName})
  3. 进入新目录($:cd{newName})
  4. 启动服务器并检查它是否在每次文件更改时都会重新加载(在大多数情况下应该可以工作,因为现在webpack会创建新文件来监视更改)
  5. 从目录中出来($:cd..)
  6. 将其移回其原始名称($:mv{newName}{projectNam})这对我有效

我添加了另一个答案,因为我相信这是迄今为止最好的解决方案。我每天都在用它,它太棒了!只需安装此库:

https://github.com/gajus/write-file-webpack-plugin

说明:强制webpack开发服务器程序将捆绑文件写入文件系统。

如何安装:

npm install write-file-webpack-plugin --save-dev

尝试将--watch更改为-d --watch

适用于我的

当我遇到类似的问题时,我遇到了这个问题——似乎webpack没有重新绑定,即使在运行webpack-config时也是如此。

我甚至删除了bundle.js,网页仍然像我编辑之前一样显示。

对于那些遇到同样问题的人,我终于在chrome中做了"空缓存和硬重新加载"选项(在devtools打开的情况下右键单击重新加载按钮),这就成功了

我遇到了同样的问题,尝试了很多方法,最终Mac上的chrome清除浏览数据对我有效

这些模块已经安装:

"浏览器同步":"^2.26.7",

"浏览器同步webpack插件":"^2.2.2",

"webpack":"^4.41.2",

"webpack cli":"^3.3.9"

问题出现在.js和.ts文件之间。为什么?

在项目构建中,Visual Studio将typescript文件编译为.js和.js.map。这是完全不必要的,因为webpack也可以处理typescript文件(有很棒的typescript加载程序)。在Visual Studio代码中编辑componet.tsx文件时,或在tsconfig.json中禁用compileOnSave选项时,编辑后的ts文件不会重新编译,我的webpack正在处理未实现的.js文件。

解决方案是在项目生成时禁用在visualstudio中编译typescript文件。添加

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>

在.csproj.的PropertyGroup中