Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 客户端请求以前的网页包构建';s发出的文件_Webpack_Webpack 2 - Fatal编程技术网

Webpack 客户端请求以前的网页包构建';s发出的文件

Webpack 客户端请求以前的网页包构建';s发出的文件,webpack,webpack-2,Webpack,Webpack 2,我让webpack在输出包filename中包含一个哈希,用于缓存失效。当我将一个构建推送到生产环境时,发送了一个html文件(其中包含对上一个构建的哈希的引用)的客户端将请求该文件。同时,如果新版本的文件替换了旧版本的文件,那么这些资产请求将被删除404 例如: 服务器包含bundle.abc123.js 浏览器请求index.html,其中包含我不知道这个解决方案是否理想,但我最终选择了它。另外,我确信可以通过编写一个webpack插件来完成,但是在我使用MVC框架的语言实现它之前,我还没

我让webpack在输出包
filename
中包含一个哈希,用于缓存失效。当我将一个构建推送到生产环境时,发送了一个html文件(其中包含对上一个构建的哈希的引用)的客户端将请求该文件。同时,如果新版本的文件替换了旧版本的文件,那么这些资产请求将被删除404

例如:

  • 服务器包含
    bundle.abc123.js

  • 浏览器请求
    index.html
    ,其中包含
    我不知道这个解决方案是否理想,但我最终选择了它。另外,我确信可以通过编写一个webpack插件来完成,但是在我使用MVC框架的语言实现它之前,我还没有编写过一个插件,将它放在启动/重新初始化例程中。无论哪种方式,这都是您希望在发出
    /dist
    文件之后发生的事情

    • 读取/assets/manifest.json,其中将包含当前和以前的文件列表
    • 从manifest.json>previous中列出的/assets中删除文件
    • 使用manifest.json>current的内容更新manifest.json>previous
    • 使用/dist的内容更新manifest.json>current
    • 将更新后的manifest.json文件写入磁盘
    • 将/dist的内容复制到/assets(将文件保留在当前位置)
    因此,最终,尽管webpack将其工件发送到
    /dist
    ,但标记中的所有
    src
    href
    引用都指向
    /assets
    ,这才是真正的交易。我正在编写的PostWebpack代码生成
    manifest.json
    文件和上面提到的其他步骤

    这将维护当前版本和上一版本的文件(n和n-1),所有文件都位于同一文件夹中。无需重写或查找:只需维护文件,直到下一个构建结束,此时n-1文件将变为n-2文件并被清除

    如果有人不喜欢在较长时间内公开较旧的文件,您可以将清理工作移动到一个进程,该进程在生成后使用您希望的任何方法执行任意时间