webpack基础篇(十二):文件指纹

简介: webpack基础篇(十二):文件指纹

说明

玩转webpack课程学习笔记。



什么是文件指纹

打包后输出的文件名的后缀。



文件指纹如何生成


   Hash:和整个项目的构建相关,只要项目文件有修改,整个项目构建的 hash 值就会更改

   Chunkhash:和 webpack 打包的 chunk 有关,不同的 entry 会生成不不同的 chunkhash 值

   Contenthash:根据文件内容来定义 hash ,文件内容不变,则 contenthash 不变



JS 的文件指纹设置


设置 outputfilename,使用 [chunkhash]

注意mode: 'production'

module.exports = {
  entry: {
    index: './src/index.js',
    search: './src/search.js'
  },
  output: {
    path: path.join(__dirname, 'dist'),
    filename: '[name]_[chunkhash].js'
  },
  mode: 'production',
};


图片和字体的文件指纹设置


设置 file-loadername,使用 [hash]



占位符名称 含义
[ext] 资源后缀名
[name] 文件名称
[path] 文件相对路径
[folder] 文件所在的文件夹
[contenthash] 文件的内容hash,默认是md5生成
[hash] 文件内容的hash,默认是md5生成
[emoji] 一个随机的指代文件内容的emoji


module.exports = {
  entry: {
    index: './src/index.js',
    search: './src/search.js'
  },
  output: {
    path: path.join(__dirname, 'dist'),
    filename: '[name]_[chunkhash].js'
  },
  mode: 'production',
  module: {
    rules: [
      {
        test: /.(png|jpg|gif|jpeg)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: '[name]_[hash:8].[ext]'
            }
          }
        ]
      },
      {
        test: /.(woff|woff2|eot|ttf|otf)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: '[name]_[hash:8].[ext]'
            }
          }
        ]
      },
    ]
  },
};


有无文件指纹打包对比


下面是js、图片、字体的打包对比,css需要另外插件处理

没有文件指纹:

20200622015420348.PNG


有文件指纹:

20200622015444474.PNG


CSS 的文件指纹设置


上面的对比没有发现有css文件出现,因为style-loader是将css插入header里。


   这里需要安装插件npm i mini-css-extract-plugin -D

mini-css-extract-plugin是生成单独的css文件,但跟style-loader有一定的冲突。


设置 MiniCssExtractPlugin 的 filename, 使用 [contenthash]

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
  entry: {
    index: './src/index.js',
    search: './src/search.js'
  },
  output: {
    path: path.join(__dirname, 'dist'),
    filename: '[name]_[chunkhash].js'
  },
  mode: 'production',
  module: {
    rules: [
      {
        test: /.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader'
        ]
      },
      {
        test: /.less$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          'less-loader'
        ]
      },
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: '[name]_[contenthash:8].css'
    })
  ]
};


20200622015505602.PNG



目录
相关文章
|
JavaScript 开发者
Vue 创建项目后没有 webpack.config.js(vue.config.js) 文件
Vue 创建项目后没有 webpack.config.js(vue.config.js) 文件
551 0
|
27天前
|
JSON 前端开发 JavaScript
webpack如何支持多种类型的文件和转换需求
【10月更文挑战第13天】webpack如何支持多种类型的文件和转换需求
|
6月前
|
Web App开发 JSON 前端开发
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
229 0
|
6月前
|
JSON 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(上)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
89 0
|
4月前
|
JavaScript
文本,Pinia的使用,(0 , _stores_token_js__WEBPACK_IMPORTED_MODULE_1__.useTokenStore),接口中必须用引入store.js文件
文本,Pinia的使用,(0 , _stores_token_js__WEBPACK_IMPORTED_MODULE_1__.useTokenStore),接口中必须用引入store.js文件
|
JavaScript
Webpack4 创建项目以及打包一个JS文件
Webpack4 创建项目以及打包一个JS文件
138 0
|
6月前
|
前端开发 JavaScript 安全
【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原
【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原
937 0
|
6月前
|
Web App开发 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(下)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
64 0
|
前端开发 JavaScript 编译器
【前端异常】vscode:无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,Cannot find module ”webpack“
【前端异常】vscode:无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,Cannot find module ”webpack“
887 0
|
JavaScript 前端开发 定位技术
vue2项目webpack打包的优化策略,降低打包文件后的大小
vue2项目webpack打包的优化策略,降低打包文件后的大小
426 0