2.2.5 使用 plugin

除了 loader 外,plugin 是另一个扩展 webpack 能力的方式。于 loader 专注于处理资源内容的转换不同,plugin 的功能范围更广,更为灵活强大。

plugin 的存在是为了实现那些 loader 实现不了或者不适合在 loader 中实现的功能。如:

  1. 自动生成项目的 html 页面 (HtmlWebpackPlugin)。
  2. 向构建过程中注入环境变量(EnvironmentPlugin---内置)。
  3. 向块(Chunk)的结果文件中添加注释信息(BannerPlugin---内置)。

在 helloworld 例子中,所有逻辑均实现在 JavaScript 中,页面 index.html 基本没有逻辑,除了一个几乎为空的 HTML 结构外,引入了一个将要被构建生成的结果文件 bundle.js 。

  1. bundle.js 是在 webpack.config.js 中 配置的 output.filename 的值,在这里取固定值不方便维护;
  2. 为了充分利用浏览器缓存,提高页面加载速度,在生产环境中常常会向静态文件的文件名添加 MD5 戳,即是 bundle_[hash].js 而不是 bundle.js,这里的 [hash] 值会在构建时被该 chunk 内容的 MD5 结果替换,以实现文件内容不变则文件名不变,内容改变导致文件名改变。

在这样的情况下,在 HTML 页面中给定结果文件的路径就变得不太现实。HtmlWebpackPlugin 正是为解决这一问题而生,他会自动生成一个几乎为空的 HTML 页面,并向其中注入构建的结果文件路径,即使路径中包含动态内容,如 MD5 戳,也能够完美处理。

安装 Plugin

webpack 一些内置 Plugin 不需要额外安装,直接使用。如:

var webpack = require("webpack");
webpack.BannerPlugin; // 这样可以直接获取 BannerPlugin

HtmlWebpackPlugin 不是内置的,它在 npm 包 html-webpack-plugin 中实现,需要安装。

npm i html-webpack-plugin --save-dev
// npm i html-webpack-plugin@1.7.0 --save-dev --安装指定版本

执行 webpack 报如下错误:

ERROR in Path must be a string. Received undefined
  1. 原因是 node 的版本号是 v6.10.1,如果说5及其以下没有问题
  2. 还有一种解决办法是在 webpack.config.js 中配置 output.publicPath 的值,没有配置 CDN 的话可以为空

整个配置如下:

var path = require("path");
var webpack = require("webpack");
var HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
  entry: path.join(__dirname, "index"),
  output: {
    filename: "bundle_[hash].js",
    path: __dirname,
    publicPath: ""
  },
  module: {
    loaders: [
        {
        test: /\.css$/,
        loaders: ["style-loader", "css-loader"]
      }
    ]
  },

  plugins: [
    // new webpack.BannerPlugin('This file is created by zhaoda')
    new HtmlWebpackPlugin({title: "use plugin"})
  ]
};

{title: "use plugin"} 参数对应 index.html 中 title 的值

时间: 2024-10-25 15:08:09

2.2.5 使用 plugin的相关文章

while creating a secondary index with plugin, queries are blocked until it ends

在Pulgin的官方文档中这样描述到: While a secondary index is being created or dropped, the table is locked in shared mode. Any writes to the table are blocked, but the data in the table can be read. read. When you alter the clustered index of a table, the table is

Sysdeo Eclipse Tomcat Launcher plugin

原文:http://www.eclipsetotale.com/tomcatPlugin.html Plugin features Support and contributions Download Installation Documentation Troubleshooting     Plugin features Starting and stopping Tomcat 4.x, 5.x, 6.x, 7.x Registering Tomcat process to Eclipse

JSP入门初级教程之plugin的使用

js|教程  jsp:plugin Action 使您能插入所需的特定的浏览器的OBJECT或EMBED元素来指定浏览器运行一个JAVA Applet所需的插件.    语法: <jsp:plugin type="bean|applet" code="classFileName" codebase="classFileDirectoryName"[ name="instanceName" ][ archive="

eclipse plugin

MyEclipse  For J2EE development. Note: I primarily use it as a JSP, Javascript, CSS, TLD, DTD editor XMLBuddy For XML file editing. Jalopy (commercial, latest stable version: 1.2) RegEx Tester Install it if you're planning on using Regular expression

Eclipse插件之WebLogic Plugin 2.0.0

web 本文介绍如何利用Eclipse插件WebLogic Plugin在Eclipse中的使用. Eclipse是目前非常流行的开发平台,开放扩展的架构让很多程序员找到了自己个性化的工作环境. 问题提出: WebLogic目前是使用比较多的应用服务器之一,Eclipse是流行的IDE,如何集成起来开发使用呢? 解决方法: 采用BEA提供的WebLogic Plugin来进行集成开发. 安装 JDK:1.4.2或1.5.0 从http://java.sun.com上去下载安装,如果是WebLog

用eclipse+Hibernate Synchronizer(plugin)开发例子(原创)

原创 1. 开发环境准备        Eclipse3.0.1        下载:http://www.eclipse.org/ Eclipse Plugin:Hibernate Synchronizer 下载:http://sourceforge.net/project/showfiles.php?group_id=99370        Hibernate-2.1.8        下载:http://internap.dl.sourceforge.net/sourceforge/hi

eclipse下tanghan plugin连mssql实战

最近一个项目要在eclipse下用tanghan plugin插件连mssql数据库,开始时怎么也连不上,下载了microsoft SQL Server 2000 Driver for JDBC后,有三个包分别为msbase.jar,mssqlserver.jar,msutil.jar,有些教程说把这三个包都写进classpath里,但tanghan连数据库的驱动只能选一个,所以这种方法不行.现有一可行的方法,就是把上面三个包分别解压,再把里面的com文件夹合并,合并方法可采用覆盖形式,即把第二

jsp:plugin

js 执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它. JSP 语法 <jsp:plugin type="bean | applet" code="classFileName" codebase="classFileDirectoryName" [ name="instanceName" ] [ archive="URIToArchive, ..." ] [ align=

C#中Plugin的实践

Plugin是一种相当灵活的可扩充.模块化机制,微软的Application Block不少采用了Plugin结构,本文讨论Plugin在C#中的一种实践. Plugin是基于统一的接口,在C#中采用Reflection机制产生实现IPlugin的对象.假定接口为IPlugin,以下代码块示意动态产生IPlugin对象的代码段,其中dllName是实现IPlugin接口类的dll文件名: public IPlugin LoadPlugin(string dllName) { Assembly a

给IBuySpy构建一个PlugIn系统

话说公元2003年12月17日,MSDN Library网站上悄无声息的多了一篇文章,介绍了关于构建一个PlugIn Framework的一些基础知识,于是,有了这篇随笔-      PlugIn,很COOL的特性,下面将演示如何给我们的IBuySpy定制一个Page Start PlugIn,这个PlugIn可以让用户自己来创建PlugIn,嵌入到IBuySpy的Page Start PlugIn里面,在网站页面载入的时候,会执行用户嵌入的PlugIn.      可我们为什么要给IBuySp