浏览器从Webpack加载旧的bundle.js

Yu *_*hen 6 javascript python flask reactjs

我是一名React新手,试图学习如何将Flask应用程序与React集成。我发现,每当我对React .js文件进行更改时,所做的更改都会重新编译bundle.js到我的浏览器中,而不会出现在浏览器中。

要复制,请从此Github存储库克隆源代码。按照说明进行设置,并确保运行webpack --watchpython app.py从虚拟环境。它应该启动一个简单的Web服务器,该服务器可以从访问localhost:5000

在Chrome浏览器上访问时,应该显示以下屏幕: 在此处输入图片说明

接下来,进入Hello.js文件并进行一些随机编辑-例如,更改Hello World!Hello everyone!。从我学到的知识来看,webpack --watch应该注意监听更改并重新编译,这确实可以做到:如果您进入,bundle.js您将看到更改已重新编译:

var Hello = _react2.default.createClass({
  displayName: 'Hello',
  render: function render() {
    return _react2.default.createElement(
      'h1',
      null,
      'Hello, everyone!'
    );
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,刷新浏览器时,将获得与以前相同的消息(Hello World)。当我检查bundle.jsChrome使用的源代码时,发现使用我的旧代码仍为STILL:在此处输入图片说明

我的理论是Chrome使用某种缓存?但是我已经玩了大约一个小时,无法bundle.js更新。

是什么导致浏览器加载bundle.js文件?

编辑:我已重新加载,现在更改已应用于我的浏览器屏幕。但是,刷新和更新似乎耗时特别长,至少需要4-5分钟。有什么办法可以缩短这个时间范围?

Bsa*_*lex 5

是的,chrome会缓存此文件。它始终具有相同的名称。
您可以通过打开开发工具并Disable cache在“网络”选项卡中设置标志来防止缓存。
在此处输入图片说明

但是请注意,您需要某种防止缓存的方法来进行生产,因为您的用户将不会设置此标志。
我建议在捆绑包名称中使用md5哈希。

  • 因此,Bsalex所指的是每次构建时都在bundle.js后面附加一个新名称,例如`bundle-AJE3XF.js`,这样当向用户发布时,他们肯定不会得到缓存的构建。也称为缓存清除。当您对代码进行不兼容的更改并且用户可能在其计算机上仍然有一个缓存文件时,这是必需的。(您不希望他们使用旧代码,但也不想让他们一直不使用缓存,因此更改文件名可以解决此问题。)Webpack具有自动执行此操作和需要新文件 (2认同)