[英]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
仅供参考:似乎 OS X 的文件夹可能会损坏,并且不再为自身和任何子文件夹发送fsevents
( watchpack
/ chokidar
/Finder 使用的)。 我不能确定这是发生在你身上的事情,但这对我和一位同事来说非常令人沮丧。
我们能够重命名损坏的父文件夹,然后按预期立即观察事件。 有关更多信息,请参阅此博客文章: http : //livereload.com/troubleshooting/os-x-fsevents-bug-may-prevent-monitoring-of-certain-folders/
上面链接中推荐的修复方法是:
前两个对我们不起作用,没有尝试 Spotlight 的建议,重新创建也没有必要。
我们能够通过打开 Finder 并在每个连续的父文件夹中创建文件来找到根本问题文件夹,直到一个文件立即出现(因为 Finder 也会被这个错误感染)。 不更新的最根目录文件夹是罪魁祸首。 我们只是mv
'd it 并mv
'd 它回到原来的名字,然后观察者工作。
不知道是什么导致了损坏,但我很高兴能解决这个问题。
将以下代码添加到我的 webpack 配置文件中为我解决了这个问题。 不要忘记忽略您的 node_modules 文件夹,因为这会降低 HMR(热模块更换)的性能:
watchOptions: {
poll: true,
ignored: /node_modules/
}
只是添加到可能的解决方案中:我将项目文件夹放在 Dropbox 文件夹中,将其移出为我解决了问题。 (OS X)
文件夹区分大小写是我的问题。 我对 require() 的代码调用具有全部小写路径名,但实际目录中有一个大写字母。 我将所有目录重命名为小写,并且 webpack 监视立即生效。
一个问题是,如果您的路径名不是绝对的,那么这样的事情就会发生。 我不小心设置resolve.root
到./
代替__dirname
,这使我浪费了很多时间删除并重新创建文件,比如我上面的家伙。
更新:删除整个目录并从 repo 中重新克隆 git 修复了我的问题。
如果 César 指出更改 fs.inotify.max_user_watches 仍然不起作用,请尝试使用轮询代替本机观察者,方法是创建您的脚本(如文档中所示)或使用--watch --watch-poll
选项运行 webpack。
请注意,如果您在虚拟机 (Vagrant / Virtualbox) 中运行 webpack 并更改主机平台上的文件,则共享文件夹中的文件更新可能不会在 Ubuntu 上触发 inotify。 这将导致 webpack 无法获取更改。
请参阅: Virtualbox 票 #10660
就我而言,在 de guest 上编辑和保存文件(在 vi 中)确实触发了 webpack。 在主机上编辑它(在 PhpStorm、记事本或任何其他应用程序中)并不会触发 webpack,无论我做什么。
我通过使用vagrant-fsnotify解决了它。
在 Laravel Homestead 为我工作
--watch --watch-poll
如果您使用 Vim,您应该尝试将 backupcopy 设置为 yes 而不是默认的 auto。 否则 Vim 有时会重命名原始文件并创建一个新文件,这会与 webpack watch 混淆:
https://github.com/webpack/webpack/issues/781
如果是这种情况,只需将其添加到您的 vim 设置中:
设置备份复制=是
我在 .vue 文件上遇到了同样的问题。 当服务器重新启动时一切正常,但在下一次保存时它不再重新编译。 问题出在一个字母大写的导入文件路径上。 很难解决这个问题,因为一切都在服务器重新启动时进行。 检查路径的大小写。
它不是为我重新编译,但后来我意识到/记得 webpack 监视依赖关系图而不仅仅是一个文件夹(或文件)。 果然,我正在更改的文件还不是该图表的一部分。
我有类似的问题,无论是 webpack 还是 watch 模式下的 rollup 都没有捕捉到我所做的更改。 我发现这基本上是我的错,因为我正在更改尚未在应用程序中的任何位置导入的模块(.tsx 文件)(例如 App.ts,它是入口点),我期待构建工具报告错误我在那里做的。
对我来说,在 VS Code 中创建文件夹和文件是问题所在。 为了解决这个问题,我重新克隆了我的 repo,这一次,通过命令行而不是代码创建了新的文件夹和文件。 我认为代码出于某种原因破坏了文件。 我看到应用程序刚刚更新,所以它可能是一个新错误。
我解决问题的方法是在导入路径中找到大写错误。 文件系统上的文件夹首字母小写,导入路径大写。 一切都编译得很好,所以这只是一个 webpack watch 包含问题。
在使用 Vagrant (2.1.15) 和 rsync 同步的 VirtualBox (5.2.18) Ubuntu (18.04) VM 中也有这个问题。 突然,第一次构建运行良好,但 Webpack 没有考虑之后的更改,即使设置了fs.inotify.max_user_watches=524288
。 在 Webpack 配置中添加poll: true
也没有帮助。
只有vagrant-notify-forwarder
工作(vagrant-fsnotify 没有工作,出于某种原因),但是在将文件保存在主机上之后重建发生得太快了,我想 rsync 没有足够的时间来完成它的任务(可能是由于我的 Vagrantfile 中同步目录的数量?)。
最后,我通过增加 Webpack 配置中的aggregateTimeout
再次使手表工作:
module.exports = {
watch: true,
watchOptions: {
aggregateTimeout: 10000
},
...
}
如果此解决方案适合您,请再次尝试降低此值,否则您每次点击保存时都必须等待 10 秒,直到构建重新启动。 默认值为300 毫秒。
看来,值: 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
但似乎即使我更改了该值,当我重新启动 PC 时,它也会恢复到默认值 16384。
创建文件:
sudo nano /etc/sysctl.d/90-override.conf
并填充它:
fs.inotify.max_user_watches=200000
看来200000对我来说已经足够了。
创建文件并添加值后,只需重新启动PC就可以了。
我有同样的问题。 我注意到它没有编译,因为我的文件夹包含一些字符(*)。 使用旧的 watcher 插件似乎可以解决这个问题。 将此行添加到您的 webpack 配置文件中。
plugins: [
new webpack.OldWatchingPlugin()
]
对我来说,删除node_modules
并再次执行 npm install 或 yarn 来安装所有软件包解决了问题
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++
可能会发生这样的情况,在安装这些软件包时,某些依赖项只是添加了拼图的缺失部分,谁知道...
希望这可以帮助任何在那里努力使其工作的人。
我正在添加另一个答案,因为我相信这是迄今为止最好的解决方案。 我每天都在使用它,它很震撼! 只需安装这个库:
https://github.com/gajus/write-file-webpack-plugin
说明:强制 webpack-dev-server 程序将捆绑文件写入文件系统。
如何安装 :
npm install write-file-webpack-plugin --save-dev
尝试将--watch
更改为-d --watch
为我工作
如果这在您的项目中突然发生,那么这可以解决问题。
也许不知何故,跟踪您的项目更改的文件被 webpack 查找损坏了。 您只需按照简单的步骤即可再次创建它们。
我在遇到类似问题时遇到了这个问题 - 即使在运行 webpack --config 时,webpack 似乎也没有重新打包。
我什至删除了 bundle.js 并且网页仍然像我编辑之前一样显示。
对于那些遇到同样问题的人,我终于在 chrome 中做了“空缓存和硬重新加载”选项(在开发工具打开的情况下右键单击重新加载按钮),并做到了这一点
我遇到了同样的问题,尝试了很多东西,最后Mac上的Chrome 清除浏览数据对我有用。
已安装这些模块:
"浏览器同步": "^2.26.7",
"browser-sync-webpack-plugin": "^2.2.2",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.9"
问题出在 .js 和 .ts 文件之间。 为什么 ?
在项目构建时,Visual Studio 将打字稿文件编译为 .js 和 .js.map。 这完全没有必要,因为 webpack 也可以处理 typescript 文件(使用 awesome-typescript-loader)。 在Visual Studio Code 中编辑组件 .tsx 文件或在tsconfig.json中禁用compileOnSave选项时,编辑的 ts 文件不会重新编译,我的 webpack 正在处理不实际的 .js 文件。
解决方案是在项目构建时禁用在 Visual Studio 中编译打字稿文件。 添加
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
在您的 .csproj 的 PropertyGroup 中。
问题是:webpack从一些奇怪的URL加载脚本:webpack:///缓存了。 您应该在脚本末尾添加版本以防止缓存: main-compiled.js?v=<?php echo time()?>"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.