zoukankan      html  css  js  c++  java
  • 理解webpack的hash,contenthash,chunkhash

    问题来源

    对于浏览器来说,一方面期望每次请求页面资源时,获得的都是最新的资源;一方面期望在资源没有发生变化时,能够复用缓存对象。

    这个时候,使用文件名+文件哈希值的方式,就可以实现只要通过文件名,就可以区分资源是否有更新。

    而webpack就内置了hash计算方法,对生成文件的可以在输出文件中添加hash字段。

    区分hash,contenthash,chunkhash

    webpack内置的hash有三种:

    • hash:每次构建会生成一个hash。和整个项目有关,只要有项目文件更改,就会改变hash
    • contenthash:和单个文件的内容相关。指定文件的内容发生改变,就会改变hash。
    • chunkhash:和webpack打包生成的chunk相关。每一个entry,都会有不同的hash。

    那么我们该怎么使用这些不同的hash值呢?

    chunkhash用法

    一般来说,针对于输出文件,我们使用chunkhash。

    因为webpack打包后,最终每个entry文件及其依赖会生成单独的一个js文件。

    此时使用chunkhash,能够保证整个打包内容的更新准确性。

    contenthash用法

    对于css文件来说,一般会使用MiniCssExtractPlugin将其抽取为一个单独的css文件。

    此时可以使用contenthash进行标记,确保css文件内容变化时,可以更新hash。

    hash用法

    一般来说,没有什么机会直接使用hash。

    hash会更据每次工程的内容进行计算,很容易造成不必要的hash变更,不利于版本管理。

    file-loader的hash

    可能有同学会表示有以下疑问。

    明明经常看到在处理一些图片,字体的file-loader的打包时,使用的是[name]_[hash:8].[ext]

    但是如果改了其他工程文件,比如index.js,生成的图片hash并没有变化。

    这里需要注意的是,file-loader的hash字段,这个loader自己定义的占位符,和webpack的内置hash字段并不一致。

    这里的hash是使用md4等hash算法,对文件内容进行hash。

    所以只要文件内容不变,hash还是会保持一致。

  • 相关阅读:
    微信小程序 单选按钮 最佳
    微信小程序 单选按钮的实现
    微信小程序 单选框实现
    Java Code To Create Pyramid and Pattern
    Java language
    npm Err! Unexpected end of JSON input while parsing near
    Node.js Express FrameWork Tutorial
    Higher-Order Function Examples
    Create First HTTP Web Server in Node.js: Complete Tutorial
    Node.js NPM Tutorial: Create, Publish, Extend & Manage
  • 原文地址:https://www.cnblogs.com/plBlog/p/14046445.html
Copyright © 2011-2022 走看看