您的位置: 翼速应用 > 业内知识 > web前端 > 正文

在webpack中如何压缩打包html资源?

在webpack中如何压缩打包html资源?本文做了详细解析,下面一起来看一下。


在webpack中如何压缩打包html资源?


在webpack中如何压缩打包html资源?


我们先来了解一下为什么需要打包html资源:我们写代码时引入的是src下面的js文件,经过webpack打包后,形成了一个入口文件,此时html中js文件的名称和路径就不对了,所以需要webpack打包,把html中引入js文件的路径替换了。


用webpack打包html的好处:


(1)可以自动将打包后的js文件引入html


(2)html打包后依然会生成在build文件夹下和打包后的js文件放在一起,这样上线的时候我们只需要将打包生成的文件夹一起拷贝到上线环境就可以了


(3)会帮我们压缩html文件


webpack中怎么压缩打包html资源


1、安装插件


webpack原生只能理解JS和JSON文件,要支持打包其他类型的文件,都需要安装相应的插件或loader。


如果我们需要打包HTML文件,首先需要安装html-webpack-plugin插件:


npm install html-webpack-plugin -D


这个插件的作用:


●  默认在出口下创建一个html文件,然后导入所有的JS/CSS资源


●  我们也可以自己指定一个html文件,在此html文件中加入资源


2、webpack.config.js配置


安装好html-webpack-plugin插件后,需要在webpack.config.js文件中进行配置:


// ...
// 1. 引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
 
module.exports = {
  // ...
  // 2. 在plugins中配置插件
  plugins: [
    new HtmlWebpackPlugin({
      template: 'index.html', // 指定入口模板文件(相对于项目根目录)
      filename: 'index.html', // 指定输出文件名和位置(相对于输出目录)
      // 关于插件的其他项配置,可以查看插件官方文档
    })
  ]
}


确保入口模板文件的路径和文件名与配置一致,然后可以编译。


3、多JS入口和多HTML情况的配置


面对需要编译出多个HTML文件,且文件需要引入不同的JS文件,但默认情况下,打包后的HTML文件会引入所有打包后的JS文件,我们可以指定chunk来分配JS。


const path = require('path');
// 1. 引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  // ...
  // 2. 配置JS入口(多入口)
  entry: {
    vendor: ['./src/jquery.min.js', './src/js/common.js'],
    index: './src/index.js',
    cart: './src/js/cart.js'
  },
  // 配置出口
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'build/js')
  },
  // 3. 配置插件
  plugins: [
    new HtmlWebpackPugin({
      template: 'index.html',
      filename: 'index.html',
      // 通过chunk来指定引入哪些JS文件
      chunk: ['index', 'vendor']
    }),
    // 需要编译多少个HTML,就需要new几次插件
    new HtmlWebpackPlugin({
      template: './src/cart.html',
      filename: 'cart.html',
      chunk: ['cart', 'vendor']
    })
  ]
}


Tip: 这里需要注意的是要编译多少个HTML文件,就要new几次HtmlWebpackPlugin。


上面的配置编译成功后,输出情况是这样的:


build
|__ index.html # 引入index.js和vendor.js
|__ cart.html    # 引入cart.js和vendor.js
|__ js
     |__ vendor.js # 由jquery.min.js和common.js生成
     |__ index.js    # 由index.js生成
     |__ cart.js       # 由cart.js生成


压缩打包html资源实例


1、webpack.config.js配置


const HTMLWebpackPlugin = require('html-webpack-plugin')
...
 plugins: [
    // html-webpack-plugin  html 打包配置 该插件将为你生成一个 HTML5 文件
    new HTMLWebpackPlugin({
      template: "./index.html", // 打包到模板的相对或绝对路径 (打包目标)
      title: '首页', // 用于生成的HTML文档的标题
      hash: true,//true则将唯一的webpack编译哈希值附加到所有包含的脚本和CSS文件中。主要用于清除缓存,
      minify: {  // 压缩html
        collapseWhitespace: true, // 折叠空白区域
        keepClosingSlash: true,  // 保持闭合间隙
        removeComments: true,   // 移除注释
        removeRedundantAttributes: true, // 删除冗余属性
        removeScriptTypeAttributes: true,  // 删除Script脚本类型属性
        removeStyleLinkTypeAttributes: true, // 删除样式链接类型属性
        useShortDoctype: true, // 使用短文档类型
        preserveLineBreaks: true, // 保留换行符
        minifyCSS: true, // 压缩文内css
        minifyJS: true, // 压缩文内js
      }
    }),
  ],
...


2、此时我们的index.html


<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>webpackDemo</title>
  </head>
  <body>
    <div id="app">
      html 打包配置
    </div>
  </body>
</html>


3、此时我们的index.js


import './../css/index.less'
 
function add(x,y) {
 return x+y
}
console.log(add(2,3));


4、控制台webpack键入打包,发现打包输出文件多了个index.html,内容如下


<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>webpackDemo</title>
  <script defer src="index.js"></script></head>
  <body>
    <div id="app">
      html 打包配置
    </div>
  </body>
</html>

<script defer="" src="index.js"></script>是自动引入的


浏览器打开打包输出的 index.html,发现样式起了效果,控制太也正常输出:


浏览器打开打包输出的 index.html


控制太正常输出


以上就是关于在webpack中如何压缩打包html资源的全部解析,翼速应用平台内有更多相关资讯,欢迎查阅!

我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题