我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

    • nodejs

    • git

    • CI

    • 小程序

    • docker

    • Typescript

    • webpack

      • webpack到底有什么作用
      • webpack能给前端做哪些性能优化
      • webpack能给前端做哪些性能优化
      • 说说Webpack中常见的Loader?解决了什么问题?
      • 说说webpack proxy的工作原理?
      • 说说webpack中常见的Plugin?解决了什么问题?
        • 是什么
        • 特性
          • 编译生命周期勾子
        • 常见 plugin
        • FAQ
      • 说说webpack热更新的理解
      • 说说webpack的构建流程?
      • 说说前端打包工具还有哪些
      • 说说对webpack的理解, 解决了什么问题
      • 说说编写loader和plugin的思路
    • 安全

  • 基础

  • 框架

  • 情商

  • 算法

  • 网络

  • 千锤百炼
  • 大前端
  • webpack
fangdown
2021-08-07
目录

说说webpack中常见的Plugin?解决了什么问题?

# 是什么

webpack 中的 plugin 是一个函数,它和主程序互相交互,提供特定的功能

解决 loader 不能解决的事情

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
const webpack = require('webpack'); // 访问内置的插件
module.exports = {
  ...
  plugins: [
    new webpack.ProgressPlugin(),
    new HtmlWebpackPlugin({ template: './src/index.html' }),
  ],
};

# 特性

apply 方法会被 webpack compiler 调用,并且在整个编译生命周期都可以访问 compiler 对象

const pluginName = "ConsoleLogOnBuildWebpackPlugin";

class ConsoleLogOnBuildWebpackPlugin {
  apply(compiler) {
    compiler.hooks.run.tap(pluginName, (compilation) => {
      console.log("webpack 构建过程开始!");
    });
  }
}

module.exports = ConsoleLogOnBuildWebpackPlugin;

# 编译生命周期勾子

entry-option :初始化 option
run
compile:真正开始的编译,在创建 compilation 对象之前
compilation :生成好了 compilation 对象
make 从 entry 开始递归分析依赖,准备对每个模块进行 build
after-compile:编译 build 过程结束
emit :在将内存中 assets 内容写到磁盘文件夹之前
after-emit :在将内存中 assets 内容写到磁盘文件夹之后
done:完成所有的编译过程
failed:编译失败的时候

# 常见 plugin

// webpack.config.js
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
 ...
  plugins: [
     new HtmlWebpackPlugin({
       title: "My App",
       filename: "app.html",
       template: "./src/html/index.html"
     })
  ]
};

const {CleanWebpackPlugin} = require('clean-webpack-plugin');
module.exports = {
 ...
  plugins: [
    ...,
    new CleanWebpackPlugin(),
    ...
  ]
}

const { DefinePlugun } = require('webpack')

module.exports = {
 ...
    plugins:[
        new DefinePlugin({
            BASE_URL:'"./"'
        })
    ]
}
<link rel="icon" href="<%= BASE_URL%>favicon.ico>"
new CopyWebpackPlugin({
    parrerns:[
        {
            from:"public",
            to:'' // 复制到的位置,可以省略,会默认复制到打包的目录下
            globOptions:{
                ignore:[
                    '**/index.html'
                ]
            }
        }
    ]
})

# FAQ

#webpack
上次更新: 2021/12/19, 18:05:42
说说webpack proxy的工作原理?
说说webpack热更新的理解

← 说说webpack proxy的工作原理? 说说webpack热更新的理解→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式