最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 分享15个Webpack实用的插件!!!

    正文概述 掘金(蛙人)   2021-03-29   574

    前言

    初衷: 分享一下工作中实用的几个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实用的插件!!!

    感谢

    谢谢你读完本篇文章,希望对你能有所帮助,如有问题欢迎各位指正。

    我是蛙人(✿◡‿◡),如果觉得写得可以的话,请点个赞吧❤。

    感兴趣的小伙伴可以加入 [ 前端娱乐圈交流群 ] 欢迎大家一起来交流讨论

    写作不易,「点赞」+「在看」+「转发」 谢谢支持❤

    往期好文

    《手把手教你写一个Vue组件发布到npm且可外链引入使用》

    《分享12个Webpack中常用的Loader》

    《聊聊什么是CommonJs和Es Module及它们的区别》

    《带你轻松理解数据结构之Map》

    《这些工作中用到的JavaScript小技巧你都知道吗?》

    《【建议收藏】分享一些工作中常用的Git命令及特殊问题场景怎么解决》

    《你真的了解ES6中的函数特性么?》


    起源地下载网 » 分享15个Webpack实用的插件!!!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元