前端与移动开发----webpack----plugin

webpack

目标:

  • 能将项目中css提取到单独的文件中
  • 能使用配置自动导入打包资源到html中
  • 能使用clean-webpack-plugin清空打包目录
  • 能做css代码和js代码压缩优化

plugin是用于扩展webpack的功能,各种各样的plugin几乎可以让webpack做任何与构建相关关的事情。

例如:

  • 抽取css到独立的文件
  • 清空打包目录
  • 把index.html自动复制到目标文件夹

plugin的配置很简单,plugins配置项接收一个数组,数组里的每一项都是一个要使用的plugin的实例,plugin需要的参数通过构造函数传入。

使用plugin的难点在于plugin本身的配置项,而不是如何在webpack中引入plugin,几乎所有webpack无法直接实现的功能,都能找到开源的plugin去解决,我们要做的就是去找更据自己的需要找出相应的plugin。

格式:

module.exports = {
   entry: 
   output:,
   module:,
   plugins:[] // 设置plugin
}

mini-css-extract-plugin

功能:这个插件帮助我们把css代码提取到一个独立的文件中(而不是以style的方式嵌在html文件中)。

npm官网:https://www.npmjs.com/package/mini-css-extract-plugin

使用:

  • 下载安装
  • 配置webpack.config.js
  • 运行webpack打包,检查效果

下载安装

它是一个开发依赖。

npm install mini-css-extract-plugin -D 
--------------------------------------
+ [email protected]
added 7 packages from 3 contributors in 10.363s

配置

在webpack.config.js中,修改三个地方:

  • 引入插件
  • 在less的loader列表中加入loader
  • 在plugins中添加 mini-css-extract-plugin

如下:

// node 中的核心模块
const path = require('path')

const MiniCssExtractPlugin = require('mini-css-extract-plugin')

module.exports = {
    
    
  //
  {
    
    
        test: /\.less$/,  // 如果这个模块以less结尾
        // 如果在打包的过程遇到了.less,则:从右向左
        // 1. 先用less-loader 读出内容,转成css
        // 2. 用css-loader 读出内容
        // 3. 用postcss-loader 配合autoprefixer这个工具给需要前缀的样式添加前缀
        // 4. style-loader把读出的内容以style标签的格式
        // 附加在.html文件上
        // use: ['style-loader','css-loader', 'postcss-loader', 'less-loader'] // 设置要处理的loader
        use: [
          {
    
    
            loader: MiniCssExtractPlugin.loader,
            options:{
    
    publicPath: '../'}
          },
          'css-loader', 'postcss-loader', 'less-loader'
        ] // 设置要处理的loader
      },
        
  // ... 
  plugins:[
    new MiniCssExtractPlugin({
    
    
      filename:'css/[name].css'
    })
  ]
}

打包尝试一下。

在这里插入图片描述

由于,此时把css单独放在一个文件中,所以在index.html如果要引入样式还需要手动去添加对css的引用。

html-webpack-plugin

问题:

需要手动去引入css,需要手动去把index.html从源文件夹复制到目标文件夹…

都可以用html-webpack-plugin来解决。

功能:把我们自已写的.html文件复制到指定打包出口目录下,并自动引入相关的资源代码

为html文件中引入的外部资源如script、link动态添加每次compile后的hash,防止引用缓存的外部文件问题。可以生成创建html入口文件。

官网:https://www.npmjs.com/package/html-webpack-plugin

实现步骤:

下载安装

npm i html-webpack-plugin -D
------------------------------------
+ [email protected]
added 63 packages from 130 contributors in 42.462s

配置

在webpack.config.js中,做两件事:

  1. 引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
  1. 将src下的index.html移动到pulbic/index.html
  2. 添加一个plugins配置
// node 中的核心模块
const path = require('path')
// console.log( path.resolve('./src/index.html')  )

const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    
    
	// ...
  plugins:[
    new MiniCssExtractPlugin({
    
    
      filename:'css/[name].css'
    }),
    new HtmlWebpackPlugin({
    
    
      minify: {
    
     // 压缩HTML文件
        removeComments: true, // 移除HTML中的注释
        collapseWhitespace: true, // 删除空白符与换行符
        minifyCSS: true// 压缩内联css
      },
      filename: 'index.html',
      // path.resolve()就是转成绝对路径
      template: path.resolve('./public/index.html') // 指定模块的位置
    })
  ]
}
  1. 打包测试

    • 它会把template中指定的.html文件复制(压缩)到出口文件夹
    • 还会自动附上打包之后.css和 .js代码

示意图:

在这里插入图片描述

clean-webpack-plugin

在生成打包文件之前,把出口目录清空掉。

安装

npm i clean-webpack-plugin -D

修改配置文件webpack.config.js

  1. 引入:

    const {
          
           CleanWebpackPlugin } = require('clean-webpack-plugin')
    
  2. 添加plugins

plugins:[
        new CleanWebpackPlugin(),
        其它...
]

再次打包时,它会帮我们先删除出口文件夹,如果提示没有权限:

Error: EPERM: operation not permitted, lstat 'D:\webpack-learn\02-code\webpack-dev-111\build\css\main.css'
    at Object.lstatSync (fs.js:1033:3)

则可以试一下:

  • 在vscode的终端中去运行打包命令
  • 苹果本:sudo npx webpack
  • window: 在打开powershell时,在这里插入图片描述

代码压缩优化

打包方式记得设置成生产模式:mode: 'production'

  • 对css进行压缩

    1. 安装插件
    npm i -D optimize-css-assets-webpack-plugin
    
    1. 配置plugins

      const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
      
      module.exports= {
              
              
      	optimization: {
              
              
          minimizer: [
            new OptimizeCssAssetsWebpackPlugin()
            ]
      	}
      }
      
      
  • 去掉js代码中的console.log

const TerserWebpackPlugin = require('terser-webpack-plugin')

module.exports = {
    
    
   // ...
+  optimization: {
    
    
    minimizer: [
      // new OptimizeCssAssetsWebpackPlugin(),
      new TerserWebpackPlugin({
    
    
        parallel: 4,
        extractComments: true,
        terserOptions: {
    
    
          compress: {
    
    
            warnings: false,
            drop_console: true,
            drop_debugger: true
          }
        }
      })
    ]
  },
}

小结

plugin用来增加webpack能力。

步骤:

  1. 下载安装
  2. 配置webpack.config.js
    1. 引入
    2. 添加plugins的设置

如有不足,请多指教,
未完待续,持续更新!
大家一起进步!

猜你喜欢

转载自blog.csdn.net/qq_40440961/article/details/112954618