webpack--watch't编译更改的文件
webpack --watch isn't compiling changed files
我尝试运行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可能会让文件夹损坏,并且不再为自己和任何子文件夹发送fsevents
(watchpack
/chokidar
/Finder使用)。我不能确定这是发生在你身上的事情,但这让我和一位同事非常沮丧。
我们能够重命名损坏的父文件夹,然后观察事件立即按预期进行。查看此博客文章以了解更多信息:http://livereload.com/troubleshooting/os-x-fsevents-bug-may-prevent-monitoring-of-certain-folders/
来自上述链接的建议修复程序是:
- 重新启动计算机
- 通过磁盘实用工具检查磁盘和修复权限
- 将文件夹添加到聚光灯隐私列表(不索引的文件夹列表),然后从中删除,有效地强制重新索引
- 重命名文件夹,然后可能将其重命名回
- 重新创建文件夹并将旧内容移回其中
前两个对我们不起作用,没有尝试聚光灯的建议,重新创作也没有必要。
我们能够通过打开Finder并在每个连续的父文件夹中创建文件来找到根本问题文件夹,直到一个文件立即出现(因为Finder也会被这个错误淹没)。没有更新的最根文件夹是罪魁祸首。我们只是用mv
和mv
把它恢复到原来的名字,然后观察者就工作了。
不知道是什么原因导致了腐败,但我很高兴能找到解决办法。
将以下代码添加到我的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查找的跟踪项目更改的文件已损坏。只需按照简单的步骤,您就可以再次创建它们。
- 从您的项目目录中出来。($:cd..)
- 将您的项目移动到其他目录($:mv{projectName}{newName})
- 进入新目录($:cd{newName})
- 启动服务器并检查它是否在每次文件更改时都会重新加载(在大多数情况下应该可以工作,因为现在webpack会创建新文件来监视更改)
- 从目录中出来($:cd..)
- 将其移回其原始名称($: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中
- 预编译的车把模板使文件大小加倍
- 如何在Windows中将Javascript文件编译成二进制文件
- GWT:有没有一种方法可以修改GWT在编译中使用的Cast.java文件
- 使用Gulp手柄部分编译为单个HTML文件
- Bootstrap CSS和JS我必须将它们包含在单独的文件中,或者可以编译它们
- 使用SeleniumWebdriver将文本复制到文件时出现编译错误的解决方案
- 在Dojo构建期间,在最小化期间关闭文件编译
- 如何编译IIFE JSX文件
- 如何将javascript文件编译成一个
- 如何使用 Gulp 将多个打字稿文件编译成一个 JavaScript 文件
- 将文件编译到dest文件夹和src文件夹
- 等待 JSX 文件编译完成
- 如何将多个 angularjs 文件编译为单个应用程序文件
- AngularJS从文件编译和渲染HTML代码
- 配置WebStorm/PhpStorm将.ts文件编译为.js文件;js”;文件夹
- 如何使Visual Studio从JS文件编译库
- 用coffee文件编译js文件
- 我可以设置gulp liverload在所有文件编译后运行吗?
- 使用grunt-json-bake将多个json文件编译成一个
- 将多个Typescript文件编译成一个javascript文件