webpack4.x 配置下载第三方库,分离js成单个文件引入HTML 第十节

本文介绍如何使用Webpack进行高效且灵活的第三方库管理。探讨了直接使用npm安装与Webpack ProvidePlugin的区别,以及如何通过优化配置减少打包体积并实现按需加载。此外还详细介绍了在Webpack 4.x版本中如何配置optimization来提取第三方库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用第三库: 

1. 直接npm下载,然后引入(完全可以使用,但是我个人不是很推荐)

    cnpm i jquery -S

    import $ from 'jquery'

    $(xxxx).on()
    $(xxx).css()
  1. ProvidePlugin (个人推荐此方式)

    const webpack = require('webpack');
    
    在plugins里面使用:
    
    plugins:[
        new Webpack.HotModuleReplacementPlugin(),
        new HtmlWebpackPlugin({
            title:'Hello World',
            template: './src/index.html' //模板地址
        }),
        new Webpack.ProvidePlugin({ //下载Jquery库
            $:'jquery'
        })
    ]
    

通过ProvidePlugin和 import直接引入区别:

1. import $...,引入之后,无论你在代码中是否使用jquery,打包后,都会打进去,这样其实产生大量的冗余js
2. Provideplugin, 只有你在使用到此库,才会打包

提取第三方库(或者想单独提出来的)js库,增加一个optimization配置,和plugins同级

在webpack3.x版本之前:使用new webpack.optimize.CommonsChunkPlugin现在已经不支持

new webpack.optimize.CommonsChunkPlugin({
        name:'jquery'
})

-

在webpack4.x以后提取第三方库或js单独引入html使用如下方法

1.配置入口文件

entry:{
    entry: jsonConfig.entry,
    jquery:'jquery',
    angular:'angular'
}, 

2.下载库

plugins:[
    // Uglify是压缩js,现在已经不需要了,只需要在script里面写成
    // "build": "webpack --mode production", 就自动压缩额
    //new Uglify(),  
    new Webpack.HotModuleReplacementPlugin(),
    new HtmlWebpackPlugin({
        title:'Hello World',
        template: './src/index.html' //模板地址
    }),
    new ExtractTextPlugin('css/index.css'), //都提到dist目录下的css目录中,文件名是index.css里面
    new PurifyCssWebpack({ //消除冗余代码
        // 首先保证找路径不是异步的,所以这里用同步的方法
        // path.join()也是path里面的方法,主要用来合并路径的
        // 'src/*.html' 表示扫描每个html的css
        paths:glob.sync(path.join(__dirname,'src/*.html')) 

    }),
    new CopyWebpackPlugin([ //支持输入一个数组
        {
            from: path.resolve(__dirname, 'src/assets'), //将src/assets下的文件
            to: './public' // 复制到publiv
        }
    ]),
    new Webpack.ProvidePlugin({
        $:'jquery', //下载Jquery
        A:'angular' // 下载Angular
    })
],

3.分离单独JS,注意:optimization和Plugins是同级,而不是在Plugins内

plugins:[
    // Uglify是压缩js,现在已经不需要了,只需要在script里面写成
    // "build": "webpack --mode production", 就自动压缩额
    //new Uglify(),  
    new Webpack.HotModuleReplacementPlugin(),
    new HtmlWebpackPlugin({
        title:'Hello World',
        template: './src/index.html' //模板地址
    }),
    new ExtractTextPlugin('css/index.css'), //都提到dist目录下的css目录中,文件名是index.css里面
    new PurifyCssWebpack({ //消除冗余代码
        // 首先保证找路径不是异步的,所以这里用同步的方法
        // path.join()也是path里面的方法,主要用来合并路径的
        // 'src/*.html' 表示扫描每个html的css
        paths:glob.sync(path.join(__dirname,'src/*.html')) 

    }),
    new CopyWebpackPlugin([ //支持输入一个数组
        {
            from: path.resolve(__dirname, 'src/assets'), //将src/assets下的文件
            to: './public' // 复制到publiv
        }
    ]),
    new Webpack.ProvidePlugin({
        $:'jquery',
        A:'angular'
    })
],
optimization:{
    splitChunks:{
        cacheGroups:{ // 单独提取JS文件引入html
            aaa:{ // 键值可以自定义
                chunks:'initial', // 
                name:'jquery', // 入口的entry的key
                enforce:true   // 强制 
            },
            bbb:{
                chunks:'initial',
                name:'angular',
                enforce:true
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值