分享15个Webpack实用的插件!!!


Posted in Javascript onMarch 31, 2021

前言

初衷: 分享一下工作中实用的几个Plugin,希望对大家有些帮助。

html-webpack-plugin

用途: 将一个页面模板打包到dist目录下,默认都是自动引入js or css

安装

cnpm i html-webpack-plugin@3.2.0 -D

配置

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>首页</title>
</head>
<body>
    <div id="app"></div>
</body>
</html>

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    plugins: [
        new HtmlWebpackPlugin({
            template: './index.html',  // 以咱们本地的index.html文件为基础模板
            filename: "index.html",  // 输出到dist目录下的文件名称
        }),
    ]
}

HtmlWebpackPlugin接收一个对象,里面自行进行配置,详细参见这里

clean-webpack-plugin

用途: 用于每次打包dist目录删除

安装

cnpm i clean-webpack-plugin -D

配置

webpack.config.js

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

extract-text-webpack-plugin

用途:css样式从js文件中提取出来最终合成一个css文件,该插件只支持webpack4之前的版本,如果你当前是webpack4及以上版本那么就会报错。

安装

cnpm i extract-text-webpack-plugin -D

配置

webpack.config.js

const extractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
    module: {
        rules: [
            {
                test: /\.css$/,
                use: extractTextPlugin.extract({
                    fallback: "style-loader", 
                    use: "css-loader"
                })
            }
        ]
    },
    plugins: [
        new extractTextPlugin({
            filename: "[name].css",
            allChunks: true
        })
    ]
}

上面配置中,extractTextPlugin.extract里面参数fallback是当提取不成功时,就执行style-loaderuse里面是提取时使用css-loader进行转换,plugins里面的配置filename是最后合并完的.css文件名称,当allChunksfalse时,只会提取初始化时的css文件,为true时会提取异步的css文件。

mini-css-extract-plugin

用途: 该插件与上面的exract-text-webpack-plugin的一样,都是将css样式提取出来, 唯一就是用法不同,本插件的webpack4版本之后推荐使用

安装

cnpm i mini-css-extract-plugin -D

配置

webpack.config.js

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                   MiniCssExtractPlugin.loader,
                   "css-loader"
                ]
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: "css/[name].css",
            chunkFilename: "css/[name].css"
        })
    ]
}

上面配置中,可以看到用法与exract-text-webpack-plugin不同,来看一下它们的区别。

  1. loader配置没有fallback
  2. plugin中设置filename同步加载资源名称,还要指定异步加载css资源chunkFilename
  3. 该插件支持配置publicPath用来设置异步加载css的路径
  4. exract-text-webpack-plugin只会提取一个css文件,mini-css-extract-plugin会根据异步文件提取出来。

webpack.optimize.CommonsChunkPlugin

用途: 用于将页面里的公共代码提取出来,从而进行优化加载速度,该CommonsChunkPlugin只支持Webpack4之前。

安装

该插件是Webpack内置的,不需要安装。

配置

main.js

import Vue from "vue"

webpack.config.js

module.exports = {
    entry: {
        main: "./main.js",
        vendor: ["Vue"]
    },
    plugins: [
        new Webpack.optimize.CommonsChunkPlugin({
            name: "vendor",
            filename: "[name].js"
        }),
        new Webpack.optimize.CommonsChunkPlugin({
            name: "common",
            chunks: ["vendor"],
            filename: "[name].js"
        })
    ]
}

上面配置中,我们把main.js及它里面的依赖文件把Vue.js提取出来进行优化,避免每次打包或者每次访问其它页面都加载一个该js文件, 我们先是把Vue基础环境提取出来,因为基础环境它几乎不会改变,从而进行提取优化是必须的。再把Webpack运行时的代码也提取出来, 这样vendor就再次打包也不会变化,可以走浏览器缓存

optimization.SplitChunks

用途: 该功能与上面的webpack.optimize.CommonsChunkPlugin一样,只不过optimization.SplitChunkswebpack4之后推荐使用的

安装

内置的,不需要安装。

配置

main.js

import Vue from "vue"
console.log(Vue)
import("./news")

news.js

import Vue from "vue"
console.log(Vue)

webpack.config.js

module.exports = {
    mode: "development",
    entry: {
        main: "./main.js"
    },
    output: {
        filename: "[name].js",
        path: __dirname + "/dist"
    },
    optimization: {
        splitChunks: {
            chunks: "all"
        }
    },
}

上面配置中,splitChunkschunksall是对所有的chunk都生效,默认只对async异步有效。

splitChunks默认情况下也有自动提取,默认要求如下:

  • 被提取的模块来自node_module目录
  • 模块大于30kb
  • 按需加载时请求资源最大值小于等于5
  • 首次加载时并行请求最大值小于等于3

DefinePlugin

用途: 用于注入全局变量,一般用在环境变量上。

安装

无需安装,webpack内置

配置

webpack.config.js

const Webpack = require("webpack")
module.exports = {
    plugins: [
        new Webpack.DefinePlugin({
           STR: JSON.stringify("蛙人"),
           "process.env": JSON.stringify("dev"),
            name: "蛙人"
        })
    ]
}

上面配置中,DefinePlugin接收一个对象,里面的key值对应一个value值,这个value值是一个代码片段,可以看上面name那个,会报错 蛙人 is not defined这里需要注意,value值必须是一个变量或代码片段

ProvidePlugin

用途: 用于定义全局变量,如100个页面都引入vue,每个页面都引入只会增加工作量,直接在webpackProvide挂载一个变量就行,不用再去一一引入。

安装

无需安装,webpack内置

配置

webpack.config.js

const Webpack = require("webpack")
module.exports = {
    plugins: [
        new Webpack.ProvidePlugin({
            "Vue": ["vue", "default"] 
        })
    ]
}

上面配置中,ProvidePlugin接收一个对象,key值是使用的变量,value值第一个参数是Vue模块,第二个参数默认取Es Module.default的属性。import默认引入进来是一个 Es Module的对象,里面有default这个属性就是实体对象

hot-module-replacement-plugin

用途: 开启热模块更新

安装

无需安装,webpack内置

配置

webpack.config.js

const Webpack = require("webpack")
module.exports = {
    plugins: [
        new Webpack.HotModuleReplacementPlugin()
    ]
}

IgnorePlugin

用途: 用于过滤打包文件,减少打包体积大小。

安装

无需安装,webpack内置

配置

webpack.config.js

const Webpack = require("webpack")
module.exports = {
    plugins: [
        new Webpack.IgnorePlugin(/.\/lib/, /element-ui/)
    ]
}

uglifyjs-webpack-plugin

用途: 用于压缩js文件,针对webpack4版本以上。

安装

cnpm install uglifyjs-webpack-plugin -D

配置

webpack.config.js

const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports = {
	optimization: {
        minimizer: [
            new UglifyJsPlugin({
                test: /\.js(\?.*)?$/i,
                exclude: /node_modules/
            })
        ]
    }
}

copy-webpack-plugin

用途: 用于将文件拷贝到某个目录下

安装

cnpm i  copy-webpack-plugin@6.4.1 -D

配置

webpack.config.js

const CopyWebpackPlugin=require('copy-webpack-plugin');
module.exports = {
    plugins: [
        new CopyWebpackPlugin({
            patterns: [
                {
                    from: "./main.js",
                    to: __dirname + "/dist/js",
                    toType: "dir"
                }
            ]
        })
    ]
}

上面配置中,将main.js拷贝到dist目录下的js里,toType默认是file,也可以设置为dir,因为我这dist目录下没有js目录。

optimize-css-assets-webpack-plugin

用途: 用于压缩css样式

安装

cnpm i optimize-css-assets-webpack-plugin -D

配置

webpack.config.js

const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin")
module.exports = {
    plugins: [
        new OptimizeCssAssetsWebpackPlugin(),
    ]
}

imagemin-webpack-plugin

用途: 用于压缩图片

安装

cnpm i imagemin-webpack-plugin -D

配置

webpack.config.js

const ImageminPlugin =  require('imagemin-webpack-plugin').default
module.exports = {
    plugins: [
        new ImageminPlugin({
             test: /\.(jpe?g|png|gif|svg)$/i 
        })
    ]
}

friendly-errors-webpack-plugin

用途: 美化控制台,良好的提示错误,。我们不想自己的终端启动乱糟糟的,比如这样

分享15个Webpack实用的插件!!!

安装

cnpm i friendly-errors-webpack-plugin -D

配置

webpack.config.js

const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
const devServer =  {
    publicPath: "/",
    port: 9527,
    host: "localhost",
    open: true,
    hotOnly: true,
    stats: 'errors-only'
}
module.exports = {
	plugins: [
		new FriendlyErrorsWebpackPlugin({
			compilationSuccessInfo: {
                notes: ['蛙人你好,系统正运行在http://localhost:' + devServer.port]
            },
            clearConsole: true,
		})
	],
	devServer
}

运行完上面代码。看如下结果

分享15个Webpack实用的插件!!!

 

Javascript 相关文章推荐
Jquery中删除元素的实现代码
Dec 29 Javascript
Javascript 键盘事件的组合使用实现代码
May 04 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
Mar 24 Javascript
js实现页面转发功能示例代码
Aug 05 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
Mar 17 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
Jun 08 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
基于jQuery制作小图标上下滑动特效
Jan 18 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
web前端页面生成exe可执行文件的方法
Feb 08 Javascript
vue移动端弹框组件的实例
Sep 25 Javascript
uniapp实现可以左右滑动导航栏
Oct 21 Javascript
JS继承最简单的理解方式
Mar 31 #Javascript
javaScript Array api梳理
Mar 31 #Javascript
抖音短视频(douyin)去水印工具的实现代码
Nest.js参数校验和自定义返回数据格式详解
Mar 29 #Javascript
Angular CLI发布路径的配置项浅析
Mar 29 #Javascript
vue中data改变后让视图同步更新的方法
vue3如何优雅的实现移动端登录注册模块
You might like
桌面中心(四)数据显示
2006/10/09 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
php实现删除空目录的方法
2015/03/16 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
js 编程笔记 无名函数
2011/06/28 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
python ansible服务及剧本编写
2017/12/29 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Django实现基于类的分页功能
2019/10/31 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
幼师自我鉴定范文
2013/10/01 职场文书
班级口号大全
2014/06/09 职场文书
庆祝儿童节标语
2014/10/09 职场文书
2014年内勤工作总结
2014/11/24 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS