编写webpack 插件

Webpack插件为第三方开发者释放了Webpack的最大可能性。利用多级回调开发者可以把他们自己的需要的功能引入到Webpack里面来。Build插件比Build loader 更进一步。因为你需要理解Webpack底层的东西。要有月底源代码的准备。

Compiler 和 Compilation

开发插件最重要的两个资源就是 compiler 和 compilation 对象,理解他们的是扩展Webpack重要的一步

  • compiler对象包涵了Webpack环境所有的的配置信息,这个对象在Webpack启动时候被构建,并配置上所有的设置选项包括 options,loaders,plugins。当启用一个插件到Webpack环境的时候,这个插件就会接受一个指向compiler的参数。运用这个参数来获取到Webpack环境
  • compilation代表了一个单一构建版本的物料。在webpack中间件运行时,每当一个文件发生改变时就会产生一个新的compilation从而产生一个新的变异后的物料集合。compilation列出了很多关于当前模块资源的信息,编译后的资源信息,改动过的文件,以及监听过的依赖。compilation也提供了插件需要自定义功能的回调点。

这两个组件在所有的Webpack插件中都是不可分割的一部分(特别是compilation),所以对于开发者来说熟悉这两个组件的源文件将是你受益很多:

插件基本结构

Plugins是可以用自身原型方法apply来实例化的对象。apply只在安装插件被Webpack compiler执行一次。apply方法传入一个Webpck compiler的引用,来访问编译器回调。

一个简单的插件结构:

 1 function HelloWorldPlugin(options) {
 2   // Setup the plugin instance with options...
 3 }
 4
 5 HelloWorldPlugin.prototype.apply = function(compiler) {
 6   compiler.plugin(‘done‘, function() {
 7     console.log(‘Hello World!‘);
 8   });
 9 };
10
11 module.exports = HelloWorldPlugin;

安装插件时, 只需要将它的一个实例放到 Webpack config plugins 数组里面:

1 var HelloWorldPlugin = require(‘hello-world‘);
2
3 var webpackConfig = {
4   // ... config settings here ...
5   plugins: [
6     new HelloWorldPlugin({options: true})
7   ]
8 };

访问 compilation

使用compiler对象,你可能需要绑定带有各个新compilation的引用的回调函数。这些compilation提供回调函数连接成许多构建过程中的步骤。

 1 function HelloCompilationPlugin(options) {}
 2
 3 HelloCompilationPlugin.prototype.apply = function(compiler) {
 4
 5   // Setup callback for accessing a compilation:
 6   compiler.plugin("compilation", function(compilation) {
 7
 8     // Now setup callbacks for accessing compilation steps:
 9     compilation.plugin("optimize", function() {
10       console.log("Assets are being optimized.");
11     });
12   });
13 });
14
15 module.exports = HelloCompilationPlugin;

更多关于在compiler, compilation等对象中哪些回调有用,看一下
plugins API

异步编译插件

有些compilation插件的步骤时异步的,并且会传入一个当你的插件运行完成时候必须调用的回调函数。

 1 function HelloAsyncPlugin(options) {}
 2
 3 HelloAsyncPlugin.prototype.apply = function(compiler) {
 4   compiler.plugin("emit", function(compilation, callback) {
 5
 6     // Do something async...
 7     setTimeout(function() {
 8       console.log("Done with async work...");
 9       callback();
10     }, 1000);
11
12   });
13 });
14
15 module.exports = HelloAsyncPlugin;

例子

我们了解了Webpack compiler和各个compilations,我们就可以用它们来创造无尽的可能。我们可以重定当前文件的格式,生成一个衍生文件,或者制造出一个全新的assets

下面我们将写一个简单的插件,生成一个filelist.md文件,里面的内容是,列出我们build的所有asset 文件。

 1 function FileListPlugin(options) {}
 2
 3 FileListPlugin.prototype.apply = function(compiler) {
 4   compiler.plugin(‘emit‘, function(compilation, callback) {
 5     // Create a header string for the generated file:
 6     var filelist = ‘In this build:\n\n‘;
 7
 8     // Loop through all compiled assets,
 9     // adding a new line item for each filename.
10     for (var filename in compilation.assets) {
11       filelist += (‘- ‘+ filename +‘\n‘);
12     }
13
14     // Insert this list into the Webpack build as a new file asset:
15     compilation.assets[‘filelist.md‘] = {
16       source: function() {
17         return filelist;
18       },
19       size: function() {
20         return filelist.length;
21       }
22     };
23
24     callback();
25   });
26 };
27
28 module.exports = FileListPlugin;

原文地址:https://www.cnblogs.com/cangqinglang/p/9059739.html

时间: 2024-08-29 12:55:21

编写webpack 插件的相关文章

第七章(插件的使用和写法)(7.6 编写 jQuery 插件)

7.6.1 插件的种类 编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率. jQuery 的插件主要分为3种类型. 1 封装对象方法的插件 这种插件是将对象方法封装起来,用于对通过选择器获取的 jQuery 对象进行操作,是最常见的一种插件. 据不完全统计,95%以上的 jQuery 插件都是封装对象方法的插件,此类插件可以发挥出 jQuery 选择器的强大优势.有相当一部分的 jQuery 的方法,都是在 jQuery 脚本库内部通过这种

编写jQuery插件

编写jQuery插件 在园子里有很多关于jQuery插件的文章,尤其 以下2篇文章: 不定义JQuery插件,不要说会JQuery jQuery插件开发精品教程,让你的jQuery提升一个台阶 这2位大神基础讲的很清楚,在这里就不多说了,主要那个小需求来练练: 需求说明:一个标题插件,可以通过后端取数,自定义标题,自定义样式 讨论:插件通常不都是加载一下就不操作了,比如表格插件,加载数据,刷新等等. 今天练习的控件就简单给大家理理写控件的思路,(有问题,有意见大家指出.) ; (function

nopcommerce商城系统--如何编写一个插件

原址:http://www.nopcommerce.com/docs/77/how-to-write-a-nopcommerce-plugin.aspx plug-in (或 plugin)是一个为更大的软件应用程序添加特定的能力的组件(Wikipedia) 插件是用来扩展nopCommerce功能的.nopCommerce拥有多种类型的插件.例如:支付方式(PayPal),税务机构,送货方式计算方法(UPS, USP, FedEx),小部件(如"在线聊天"块)等等. nopComme

自己编写jQuery插件 之 菜单折叠

菜单折叠这个功能很简单,很多人都有写过,只因它在项目中使用实在是太频繁了.代码就那么几行,没什么讲的,这里只是将其封装成插件而已. Html代码如下: <div class="box"> <p>菜单一</p> <ul> <li><a>1111</a></li> <li><a>1111</a></li> <li><a>11

自己编写jQuery插件 之 表单验证

吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思.不想这样,不想这样,快让这种情绪消失吧,忽忽.... 表单验证在项目中用的还是比较多的,公司当前正在做的项目就要用到,故此写了此插件,先给大家看下在项目中应用的效果图吧: 直接上插件实现代码了,围绕代码进行讲解比较容易点: /* 描述:基于jquery的表单验证插件. 时间:2014-8-3 作者:similar([email protected]) */ (function ($) { $.fn.checkFor

$.widget 编写jQueryUI插件(widget)

转自:MainTao: 编写jQueryUI插件(widget) 使用jQueryUI的widget来写插件,相比于基本的jquery插件有一些好处: * 方便实现继承,代码重用 * 默认是单例 * widget已经给你实现好的一些常用方法,例如destroy 带来好处的同时也带来了荆棘和陷阱,本文的目的就是梳理这些荆棘,标出哪里有陷阱. 基本知识:命名规范,public, private, this, this.element 如何开始写一个widget呢?模板如下: (function ($

编写jQuery插件的方法

声明:详细内容请看<<锋利的jquery>>这本书 这里没对自定义选择器作介绍 因为我感觉jQuery已经为我们定义足够的选择器已经满足使用 <!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>编写jquery插件<

编写IE插件的框架Add-in Express for Internet Explorer and .net 下载及使用方法

原文来自龙博方案网http://www.fanganwang.com/product/1362转载请注明出处 Add-in Express for Internet Explore 是第一个适用于开发 IE 附件的可视化工具. 它完全支持IE 扩展 API控件,并且使得 add-on 开发和配置更方便. 可视化设计: 你只需要写功能代码Add-in Express 完全基于 Rapid Application Development 方法,并且使得你可以通过一些点击来开发专业的 Internet

webpack 插件拾趣 (1) —— webpack-dev-server

结束了一季的忙碌,我这封笔已久的博客也终究该从春困的咒印中复苏,想来写些实用易读的作为开篇,自然是最好不过. 新开个 webpack 插件/工具介绍的文章系列,约莫每周更新一篇篇幅适中的文章聊以共勉,兴许合适. 原本期望每篇文章里可以介绍若干个插件,但鉴于部分插件略为复杂,且单篇内容不想写的唇焦舌敝惹人倦烦,所以像本文要介绍的 webpack-dev-server 就独立一文了. 回归主题,今天你或许会花上30分钟的时间读完本章,并掌握 webpack-dev-server 的使用方法.理清一些