热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webpack3CommonsChunkPlugin插件分离三方库(jQuery.js/vue.js等)和公共模块分别打包

需求:使用webpack进行打包时,我们不想自己写的js文件与第三方的js库一起打包成一个庞大的文件,而是想要第三方插件库单独打包一个js

需求:使用webpack进行打包时,我们不想自己写的js文件与第三方的js库一起打包成一个庞大的文件,而是想要第三方插件库单独打包一个js 。我们自己写的js独立打包。

 

优点:

1.分割js文件避免单独一个js文件太大影响用户使用体验。

2.通常来说,第三方库文件我们不会去变动里面的内容,每次打包变动内容基本是在我们自己的js文件中,所以单独打包比较好。

 

准备:

想要实现js分别打包需要CommonsChunkPlugin插件,该插件webpack自带 所以不需要另外下载。

我们准备三个js:index.js,  index2.js,  a.js  

在index.js  index2.js 中 都使用了 本地vue.js  jQurey.js两个三方js   和a.js(自己的公共js),我们想要打包时三方插件打在一个包(vendor.js),自己写的公共js打在(commons.js)

index.js:

require('../css/index.css');
// import Vue from "../lib/vue.js";
// import $ from "../lib/jquery-3.2.1.min.js";
import common from './a.js';
var vm = new Vue({el:"#app",data:{message1:"页面加载与"+new Date().toLocaleString(),}});$(document).ready(function(){//alert("测试$是否可用"+common.person[0].name);
});

index2.js

require('../css/index2.css');
// import Vue from "../lib/vue.js";
// import $ from "../lib/jquery-3.2.1.min.js";
import common from './a.js';
var vm = new Vue({el:"#app",data:{message:"First Vue Test ."}
});
$(document).ready(function(){alert("测试$是否可用2");
});

a.js

/*!* a.js* (c) 2020-4-20 By WB* */
export default {person:[{name:"小黄",sex:"男"},{name:"小明",sex:"女"}],number:56,}

 

 webpack.config.js

const path = require("path");
// 引入插件
const HTMLWebpackPlugin = require("html-webpack-plugin");
// 清理 dist 文件夹
const CleanWebpackPlugin = require("clean-webpack-plugin")
// 抽取 css
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const config = require("./config");
// 通过 html-webpack-plugin 生成的 HTML 集合
const webpack = require("webpack")//单独加入需要的第三方 js文件
//Entries['vendor']=[path.resolve(__dirname, `../app/lib/jquery-3.2.1.min.js`),path.resolve(__dirname, `../app/lib/vue.js`)];
// Entries['Vue']=path.resolve(__dirname, `../app/lib/vue.js`);;
module.exports = {entry:{index:path.resolve(__dirname,`../app/js/index.js`),index2:path.resolve(__dirname,`../app/js/index2.js`),vendor:[path.resolve(__dirname,`../app/lib/jquery-3.2.1.min.js`),path.resolve(__dirname,`../app/lib/vue.js`)]},devtool:"cheap-module-source-map",output:{filename:"js/[name].bundle.[hash].js",path:path.resolve(__dirname,"../dist")},// 加载器module:{rules:[{// 对 css 后缀名进行处理test:/\.css$/,// 不处理 node_modules 文件中的 css 文件exclude: /node_modules/,// 抽取 css 文件到单独的文件夹use: ExtractTextPlugin.extract({fallback: "style-loader",// 设置 css 的 publicPathpublicPath: config.cssPublicPath,use: [{loader:"css-loader",options:{// 开启 css 压缩minimize:true,}},{loader:"postcss-loader",}]})},{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: ['env']}}},{test: /\.(png|svg|jpg|gif)$/,use:{loader:"file-loader",options:{// 打包生成图片的名字name:"[name].[ext]",// 图片的生成路径outputPath:config.imgOutputPath}}},{test: /\.(woff|woff2|eot|ttf|otf)$/,use:["file-loader"]}],},plugins:[// 自动清理 dist 文件夹new CleanWebpackPlugin(['dist'], {root: path.resolve(__dirname, '../'), //根目录verbose: true,           //开启在控制台输出信息}),// 将 css 抽取到某个文件夹new ExtractTextPlugin(config.cssOutputPath), // 自动生成 HTML 插件//...HTMLPlugins,//功能:不再需要import和require 引入 js可直接使用new webpack.ProvidePlugin({Vue: path.resolve(__dirname, `../app/lib/vue.js`),$: path.resolve(__dirname, `../app/lib/jquery-3.2.1.min.js`),jQuery: path.resolve(__dirname, `../app/lib/jquery-3.2.1.min.js`)}),// new HTMLWebpackPlugin({// filename: `${page}.html`,// template: path.resolve(__dirname, `../app/html/${page}.html`),// chunks: [page,'commons','vendor']// }),new webpack.optimize.CommonsChunkPlugin({name: ['vendor'],filename: "[name].[hash].bundle.js",minChunks:Infinity}),new webpack.optimize.CommonsChunkPlugin({chunks:['index','index2'],name: ['commons'],filename: "[name].[hash].bundle.js",minChunks: 2,}),],
}

重点: 

我们在entry中设置了vendor:[path.resolve(__dirname,`../app/lib/jquery-3.2.1.min.js`),path.resolve(__dirname,`../app/lib/vue.js`)]

公共代码抽取插件如下设置时,表示:

new webpack.optimize.CommonsChunkPlugin({name: ['vendor'],filename: "[name].bundle.js",minChunks:Infinity}),new webpack.optimize.CommonsChunkPlugin({chunks:['index','index2'],name: ['commons'],filename: "[name].bundle.js",minChunks: 2,}),

1.将三方插件代码抽取为一个名为verdor.bundle.js的文件。

2.除了三方插件,将index index2两个js文件都调用的自己写的公共js抽取为一个名字为commons.bundle.js的文件

*minChunks:表示最小多少个entry里的入口文件调用了相同的公共js,才回执行抽取公共代码操作

       值为2表示最少两个入口文件调用了某个公共js 本例index index2都调用了a.js 所以将其抽取生产commons.bundle.js

       值为minChunks:Infinity时 网上答案比较绕口 你可以理解为:verdor.bundle.js里 只会打包在entry入口处vendor设置的三方插件。而不会打包index index两个js调用的a.js 否则不设置时如下结果 自己的a.js也被打包 没有成功打包到commons.budls.js

*chunks:['index','index2']: 表示只在这两个js文件中分析他们相同的引用js  如果不设置,则默认分析entry中所有设置的js入口文件 我们index index两个js都引用了 a.js  满足minChunks:2  所以结果如下图

 

 

 

 

 


推荐阅读
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文讨论了为什么在main.js中写import不会全局生效的问题,并提供了解决方案。在每一个vue文件中都需要写import语句才能使其生效,而在main.js中写import语句则不会全局生效。本文还介绍了使用Swal和sweetalert2库的示例。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
author-avatar
Joke-晓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有