【发布时间】:2018-07-28 10:10:38
【问题描述】:
我有 PWA 应用程序,我在其中使用 Webpack 呈现 js 文件:
{% render_bundle 'app' 'js' %}
在移动 Chrome 中启动 PWA 应用程序后,文件未更新。 Chrome 很可能使用缓存版本。
我尝试删除 PWA 应用并重新安装,但没有帮助。
之后我手动清除了移动 Chrome 缓存并刷新了文件,但是,大多数用户不会这样做,所以我需要另一个不需要最终用户执行任何操作的解决方案。
类似question的回答建议在js文件中添加参数或版本号。
<script type="text/javascript" src="myfile.js?REVISION"></script>
但是,我不清楚如何使用 Webpack 做到这一点?
一位更受欢迎的answer 解释说我可以使用hash 或chunhash 来使用Webpack 生成文件名:
output: {
path: '/',
filename: '[hash].js',
chunkFilename: '[chunkhash].js',
},
此解决方案对我不起作用,因为每次文件中有一些更改时,我都无法更改文件名。文件名应该保持不变,因为我使用的是 django 的 collectfast 应用程序。它检查静态文件的 md5sum 并仅更新那些已更改的文件。
静态 js 文件的名称应该保持不变。同时,我需要强制移动 Chrome 更新更改文件的机制。
【问题讨论】:
-
你遇到了什么错误?
-
@abielita 错误是当我将新的 js 文件上传到服务器时,该文件未在移动设备的 PWA 应用程序中更新。
-
如果您的应用程序由于多个公共模块而确实使用了多个块如果它们的内容发生变化,您不希望它们在每次构建时都更新(应该确保通过使用块哈希)?请确认
chunkhash在构建期间不会(不)更改。我不熟悉这些配置,但我的印象是chunkhash不应该在没有代码更改的情况下更改。如果它在没有代码更改的情况下发生更改,则可能表明另一个问题。请在您的问题中添加此类意见。更多的配置也可能会有所帮助。 -
类似的问答你可能会从中获得灵感(不确定是否重复):stackoverflow.com/questions/42829865/…
-
@try-catch-终于是的,好点。当它们被更改时,我真的在更新它们,但同时我不想更新它们的名称。原因是我使用的是内部解决方案(没有 webpack),它为每个文件计算 md5sum。然后将文件的名称用作标识符,并且应保持不变。
标签: javascript google-chrome webpack progressive-web-apps