【webpack】5-如何解析html文件、图片等其他资源

HtmlWebpackPlugin解析html

webpack同样一开始是无法解析html的,需要插件支持HtmlWebpackPlugin

安装

npm i html-webpack-plugin -D

基本使用

const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  plugins: [
    // 只这样写new HtmlWebpackPlugin() 默认会创建一个空的html文件,自动引入打包输出的所有资源(js/css)
    new HtmlWebpackPlugin({
    	title: '百度一下', // 修改index.html的页面名称,但当设置了下面的template后,就会失效了
    	// filename: 'home.html', // 修改index.html的文件名称
        template: './src/index.html', // 加入这行,就会复制./src/index.html文件,并自动引入打包输出的所有资源(js/css),就不会是空的html文件了。也可用绝对地址的来写值path.resolve(__dirname, './src/index.html')
        templateParamters: {
			titleName: '百度一下', // 如果title失效了,就用这个配置,而且还需要在index.html的title标签内容要用动态写法<%= titleName%>
		},
		// publicPath配置也同样支持,功能同output模块
    })
  ]
}

压缩

还可以对html进行压缩操作

const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
	plugins: [
		new HtmlWebpackPlugin({
			template: './src/index.html',
			minify: { // 压缩配置
				collapseWhitespace: true, // 移除空格
				removeComments: true // 移除注释
			}
		})
	]
}

图片

主要靠两个loader:url-loaderfile-loader

安装

npm i url-loader file-loader -D

配置

const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  module: {
    rules: [
      {
        test: /.css$/, 
        use: [
          'style-loader', 
          'css-loader',
        ]
      },
      {
        // 处理图片资源
        test: /\.(jpg|png|gif)$/,
        loader: 'url-loader', // 只有一个loader可以这样写
        options: { // 对loader进行配置
          limit: 8 * 1024, // 图片小于8kb,就转成base64
          esModules: false, // 因为url-loader默认用es6模块化语法去解析,而下面的html-loader引入的标签图片是commonjs规范,所以需要把url-loader关闭es6模块化语法,改用commonjs规范
          name: '[hash:10].[ext]', // 默认打包后的图片是个很长的哈希值,可以通过name进行重命名,例子是取前十位,文件格式为原格式
          outputPath: 'imgs' // 意思是在输出的文件夹内新建个imgs文件夹,把打包后的图片资源放里面。
        }
      },
      // 因为光靠url-loader,并不能对html便签src引入的文件进行解析,所以需要通过html-loader解析html文件,引入便签对应的img,才能被url-loader处理
      {
        test: /\.html$/,
        loader: 'html-loader' 
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html' 
    })
  ]
}

base64图片

以字符串的形式体现,一般8-12kb可以转成base64。

优点有:浏览器自动解析,能减少http请求数量,提高渲染速度,减轻服务器压力。

缺点:图片体积会更大,数量多了页面加载压力会大。


其他资源

例如图标、字体等,需要用到file-loader

安装

npm i file-loader -D

配置

const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  module: {
    rules: [
      {
        test: /.css$/, 
        use: [
          'style-loader', 
          'css-loader',
        ]
      },
      {
        exclude: '/\.(css|js|html|less|png)$/', // 意思是匹配除了()里的所有资源
        loader: 'file-loader',
        options: { // 对loader进行配置
          name: '[hash:10].[ext]' 
        }
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html' 
    })
  ]
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值