文件指纹的作用和策略是什么,设置怎样操作
Admin 2022-11-15 群英技术资讯 1202 次浏览
在日常操作或是项目的实际应用中,有不少朋友对于“文件指纹的作用和策略是什么,设置怎样操作”的问题会存在疑惑,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。文件指纹是文件打包后输出的文件名的后缀,通常用来做一些文件的版本管理
和整个项目的构建相关,只要项目文件有修改,整个项目构建的hash值就会更改,并且全部文件都共用相同的hash值
和webpack打包的chunk有关,不同的entyr会生成不同的Chunkhash值(一个页面的值改变了并不会影响另一个页面,js文件一般采用此方法),chunkhash和hash不一样,它根据不同的入口文件(Entry)进行依赖文件解析、构建对应的chunk,生成对应的哈希值。我们在生产环境里把一些公共库和程序入口文件区分开,单独打包构建,接着我们采用chunkhash的方式生成哈希值,那么只要我们不改动公共库的代码,就可以保证其哈希值不会受影响。
根据文件内容来定义hash,文件内容不变,则contenthash不变(css文件一般采用此方法)。
比如文件index.css被index.js引用了,所以共用相同的chunkhash值。但是这样子有个问题,如果index.js更改了代码,css文件就算内容没有任何改变,由于是该模块发生了改变,导致css文件会重复构建。
这个时候,我们可以使用extra-text-webpack-plugin里的contenthash值,保证即使css文件所处的模块里就算其他文件内容改变,只要css文件内容不变,那么不会重复构建。
hash一般是结合CDN缓存来使用,通过webpack构建之后,生成对应文件名自动带上对应的MD5值。如果文件内容改变的话,那么对应文件哈希值也会改变,对应的HTML引用的URL地址也会改变,触发CDN服务器从源服务器上拉取对应数据,进而更新本地缓存。但是在实际使用的时候,这几种hash计算还是有一定区别。
| 占位符名称 | 定义 |
|---|---|
| [ext] | 资源后缀名 |
| [name] | 文件名称 |
| [path] | 文件的相对路径 |
| [folder] | 文件所在的文件夹 |
| [contenthash] | 文件的内容hash,默认是md5生成 |
| [hash] | 文件的内容hash,默认是md5生成 |
| [emoji] | 一个随机的指代文件内容的emoji |
根据不同的文件类型一般选择不同的文件指纹策略,通常情况下:
下面我们来介绍下几种用法
设置output的filename,使用[chunkhash],chunkhash没办法和热更新一起使用的,不能与HotModuleReplacementPlugin这个插件一起使用,所以我们只在生产环境写。
output: { //打包输出文件
path: path.join(__dirname, 'dist'),
filename: '[name]_[chunkhash:8].js' //chunkhash指纹策略,截取前面8个字符
}
设置file-loader的name,使用[hash]。
module: {
rules: [
{
test: /.(png|jpg|gif|jpeg)$/,
use: {
loader: "url-loader",
options: {
name: '[name]_[hash:8].[ext]',
limit: 10240 //不超过10K时,将其转化为base64
}
}
},
},
CSS文件指纹策略比较特殊,我们需要用到MiniCssExtractPlugin,设置MiniCssExtractPlugin 的 filename,使用[contenthash]。
正常情况下,如果我们使用了style-loader和css-loader的话,那么这个css会由style-loader将css插入到style里面,并且放到head头部,此时并没有一个独立的css文件,因此,我们通常会采用MiniCssExtractPlugin,通过这个插件把这个style-loader的css提取成一个独立的文件,所以,对于这个css的文件指纹,我们会设置在这个MiniCssExtractPlugin里面,给它设置一个filename,并且给它设置一个[contenthash]。
注意:MiniCssExtractPlugin这个插件没办法与style-loader一起使用,因为它们之间的功能是互斥的,所以需要将style-loader换成MiniCssExtractPlugin.loader。
首先安装MiniCssExtractPlugin
npm i -D mini-css-extract-plugin
配置webpack.config.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
......
module.exports = {
plugins: [
new MiniCssExtractPlugin({
filename: '[name][contenthash:8].css'
})
],
}
将webpack.config.js文件更名为webpack.dev.js并将内部的mode修改为development,再复制一份文件,更名为webpack.prod.js将mode修改为production。
然后需要修改配置文件package.json区分production和development
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --config webpack.prod.js",
"watch": "webpack --watch --progress",
"dev": "webpack-dev-server -config webpack.dev.js --open"
}
完成上述步骤,我们在项目中就可以根据生产环境和开发环境不同,配置不同的文件指纹。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
JavaScript中wrap的意思是“包裹”,wrap()方法用于指定的 HTML元素来包裹每个被选元素,语法为“元素对象.wrap(wrappingElement,function(index))”。
这篇文章主要介绍JS中的new,new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。下面我们一起来看看我呢很脏具体内容的详细介绍,需要的朋友可以参考一下
vue的防抖和节流是什么意思?一些朋友可能对防抖和节流不是很了解,对此这篇文章就给大家具体的介绍一下什么是防抖和节流,感兴趣的朋友接下来跟随小编一起学习一下吧。
nodejs删除模块的方法:1、打开命令行窗口,使用cd命令进入指定项目目录中;2、执行“npm uninstall 模块名称”命令即可删除指定模块。
这篇文章给大家分享的是jquery怎样实现图片悬浮的效果的内容,图片悬浮是一个比较常见的图片展示效果,也就是点击小图,然后悬浮展现的大图的一个效果,小编觉得挺实用的,因此分享给大家做个参考,感兴趣的朋友一起跟随小编看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008