webpack原理篇(六十三):插件基本结构介绍

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack原理篇(六十三):插件基本结构介绍相关的知识,希望对你有一定的参考价值。

说明

玩转 webpack 学习笔记

插件的运行环境

插件没有像 loader 那样的独立运行环境

只能在 webpack 里面运行

插件的基本结构:

基本结构:

class MyPlugin   // 插件名称
    apply(compiler)   // 插件上的 apply 方法
        compiler.hooks.done.tap('My Plugin', ( // 插件的 hooks
            stats /* stats is passed as argument when done hook is tapped. */
        ) => 
            console.log('Hello World!'); // 插件处理逻辑
        );
    

module.exports = MyPlugin;

插件使用:

plugins: [ new MyPlugin() ]

搭建插件的运行环境

const path = require("path");
const DemoPlugin = require("./plugins/demo-plugin.js");
const PATHS = 
    lib: path.join(__dirname, "app", "shake.js"), build: path.join(__dirname, "build"),
;
module.exports = 
    entry: 
        lib: PATHS.lib,
    ,
    output: 
        path: PATHS.build, filename: "[name].js",
    ,
    plugins: [new DemoPlugin()],
;

开发一个最简单的插件

src/demo-plugin.js

module.exports = class DemoPlugin 
    constructor(options) 
        this.options = options;
    
    apply() 
        console.log("apply", this.options);
    
;

加入到 webpack 配置中

module.exports = 
	plugins: [new DemoPlugin( name: "demo" )]
;

实战

1、新建项目

新建文件夹 my-plugin 文件夹,执行 npm init -y

2、安装 webpack 环境

npm i webpack@4.39.1 webpack-cli@3.3.6 -D

3、添加 webpack.config.js 配置

const path = require('path');
const MyPlugin = require('./plugins/my-plugin.js');

module.exports = 
    entry: './src/index.js',
    output: 
        path: path.join(__dirname, 'dist'),
        filename: 'main.js'
    ,
    mode: 'production',
    plugins: [
        new MyPlugin(
            name: 'my plugin kaimo313'
        )
    ]

4、添加 src 以及 my-plugin.js

src 里面添加 index.js 文件


新建 plugins 文件夹,里面添加 my-plugin.js 文件

class MyPlugin 
    constructor(options) 
        this.options = options;
    
    apply(compiler) 
        console.log('my plugin options---->', this.options);
    

module.exports = MyPlugin;

5、运行构建

执行 webpack

以上是关于webpack原理篇(六十三):插件基本结构介绍的主要内容,如果未能解决你的问题,请参考以下文章

webpack原理篇(六十五):实战开发一个压缩构建资源为zip包的插件

webpack原理篇(五十三):Tapable插件架构与Hooks设计

webpack原理篇(六十):使用 loader-runner 高效进行 loader 的调试

webpack原理篇(六十一):更复杂的 loader 的开发场

webpack拓展篇(六十九):vite 的构建原理(完结)

webpack原理篇(六十二):实战开发一个自动合成雪碧图的loader