使用plugin

plugin是另一个扩展webpack能力的方式,plugin的功能范围更广。plugin的存在可以看成是为了实现那些loader实现不了或不合适在loader中实现的功能。如自动生成项目HTML页面(HtmlWebpackPlugin)、向构建过程注入环境变量(EnvironmentPlugin)、向块(chunk)的结果文件中添加注释信息(BannerPlugin)等。
  webpack内置了一些常用的plugin,如EnvironmentPlugin及BannerPlulgin,更多第三方的plugin可以通过安装npm包的形式引入,如HtmlWebpackPlugin对应的npm包是html-webpack-plugin。


  • HtmlWebpackPlugin
      在前面的Hello world示例中,我们看到,因为逻辑均实现在JavaScript中,页面(index.html)的实现中基本没有逻辑,除了提供一个几乎为空的HTML结构外,引入了将要被构建生成的结果文件bundle.js。
      一方面,bundle.js是在webpack.config.js中配置的值,取固定值不方便维护;另一方面,为了充分利用浏览器缓存,提高页面加载速度,生产环境中常常会向静态文件的文件名添加MD5戳,即使用bundle_[hash].js而不是bundle.js,这里的[hash]会在构建时被该chunk内容的MD5结果替换,以实现内容不变则文件名不变。
      在这样的情况下,在HTML页面中给定结果文件就变得不太现实。而HtmlWebpackPlugin正是为解决这一问题而生。

HtmlWebpackPlugin会自动生成一个几乎为空的HTML页面,并向其中注入构建的结果文件路径,即使路径中包含动态内容,如MD5戳,也能够完美处理。

  • 安装plugin
    对于内置的plugin,可以直接使用:
var webpack = require('webpack');
webpack.BannerPlugin;  //这样就可以直接获取BannerPlugin

HtmlWebpackPlulgin并非内置plugin,需要先安装:

npm i html-webpack-plugin@1.7.0 --save-dev

完了后,在webpack.config.js中就可以获取这个插件了:

var HtmlWebpackPlugin = require('html-webpack-plugin');
  • 配置plugin
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: path.join(__dirname, 'index'),
    output: {
        path: __dirname,
        filename: 'bundle.js'
    },
    module: {
        loaders: [
            {
                test: /\.css$/,
                loaders: ['style', 'css']
            }
        ]
    },
    plugins: [  // 配置plugin
        new HtmlWebpackPlugin({
            title: 'use plugin'
        })
    ]
};

我们创造了一个HtmlWebpackPlugin实例,传入了{title: 'use plugin'},告诉HtmlWebpackPlugin给生成的HTML页面设置<title>内容为use plugin。
原来的index.html可以删除了。构建完成后,插件会自动生成index.html。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 12,554评论 7 35
  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 14,341评论 7 110
  • 除了 loader 外,plugin 是另一个扩展 webpack 能力的方式。于 loader 专注于处理资源内...
    赛亚人之神阅读 2,490评论 0 0
  • 学习流程 参考文档:入门Webpack,看这篇就够了Webpack for React 一. 简单使用webpac...
    Jason_Zeng阅读 8,356评论 2 16
  • 今天终于写得早点了。 终于不用弄到晚上一点以后了。 不过这几天的写得很晚的经历让我意识到一个问题,事情还是早做早好...
    QimuAI阅读 4,417评论 0 1

友情链接更多精彩内容