分享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 相关文章推荐
关于js中for in的缺陷浅析
Dec 02 Javascript
JQuery实现绚丽的横向下拉菜单
Dec 19 Javascript
加随机数引入脚本不让浏览器读取缓存
Sep 04 Javascript
javascript中数组array及string的方法总结
Nov 28 Javascript
jQuery实现点击小图显示大图代码分享
Aug 25 Javascript
jQuery on()方法示例及jquery on()方法的优点
Aug 27 Javascript
JS实现点击链接切换显示隐藏内容的方法
Oct 19 Javascript
js中比较两个对象是否相同的方法示例
Sep 02 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
Sep 05 Javascript
webpack的pitching loader详解
Sep 23 Javascript
JS实现动态星空背景效果
Nov 01 Javascript
ajax jquery实现页面某一个div的刷新效果
Mar 04 jQuery
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
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
php实现的二分查找算法示例
2017/06/20 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
2017/07/18 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
python批量提交沙箱问题实例
2014/10/08 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
举例讲解Python常用模块
2019/03/08 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
python列表的逆序遍历实现
2020/04/20 Python
python如何调用java类
2020/07/05 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
医院检讨书范文
2014/02/01 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
大学生社会实践评语
2014/04/25 职场文书
工程售后服务承诺书
2014/05/21 职场文书
治安消防安全责任书
2014/07/23 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
开除员工通知
2015/04/22 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python