Vue——11- webpack保姆级教程02

简介: source-map、oneOf、externals、树摇技术、安装jQuery、 对css进行打包压缩以及 code split(代码分割)

一、source-map

source-map查错

配置sourve-map之前先要配置css兼容性写法

source-map:一种提供源代码到构建后代码的映射的技术 (如果构建后代码出错了,通过映射可以追踪源代码错误)

借助上一章例子来演示:详情请参考webpack打包保姆级教程01

af572f5a261743dcba7d867ab6af0bae.png

677ec73595fd4bf2a7b84018504e527e.png

在webpack.config.js中添加devtool:'source-map'

devtool: 'eval-source-map'

993f04428f7443bfb3b289af208136aa.png

3b1dd938813c4a96aae076cc2af8d58e.png

40682b3c8ec84ed7b3e91ef213027fe9.png

添加了俩排错文件map

32001afec1ad41a59c818964b918cdb6.png8b2f8515b7d14550b498c216f2bb1da2.png

e6262ab2698d40c5a7e5011e675defad.png

二、oneOf

加快打包速度,把rules里面的所有内容用{oneOf:[]}

2f8687c84bf24b15b932244ac02c3d35.png

24c4ba244b90436eb9532713d4cb87d6.png

再次运行

npx webpack-dev-server

202f678b4d2145c68b23182c68827b96.png

三、安装jQuery插件并对jQuery进行打包

npm install jquery --save-dev

引入jQuery:

import $ from 'jquery';
console.log($);

2a8d059cef7f48bba60a2f86a43ee312.png进行打包:

2a9b86779cfa4865ac59b49a3d738634.png

在node_moddules文件夹中发现已经有了jQuery即为成功

32bccf44b1d64c62a48b6fe62b54363c.png

21f1c4ea2ca84c0c87cdb1de19bd6eb0.png

运行一下:

npx webpack-dev-server

3cb19366c47f4b4cbd9fb24eada47206.png

但是如果引入过多的文件比如图表啊unitApp等一系列文件会导致main.js特别大,打开速度也会随之变慢。这时需要解决一下

四、externals

externals:让某些库不打包。

webpack.config.js 中配置:用的时候把注释给删掉

externals: {
  // 拒绝jQuery被打包进来(通过cdn引入,速度会快一些)
  // 忽略的库名 -- npm包名
  jquery: 'jQuery'
}

161624070f8745c4939b6fb37b67ec2f.png

然后需要在 index.html 中通过 cdn 来引入:

<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>

引入jquery.js库可以用猫云进行获取路径

2b50802109aa4a33ab5db0609bf183db.png569695c4b31744a0b4eee2f5a5bcae3c.png

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

242df9450b9648b58c03e40a849b7ad1.png可以通过npx webpack-dev-server 来运行并查看大小

压缩前:main.js为555kib

55a0d716209e4a5fb535128e2f4edfbb.png

压缩后:main.js为 273kib

e4325747a87143b882dca45353c32275.png

五、对css文件进行打包压缩

npm install css-minimizer-webpack-plugin --save-dev
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");//压缩css
 new CssMinimizerPlugin(),//新的压缩css方法

c616771e324143318387606f1a498773.png

打包即可

e3a575bbea534f05b1d431ce76fd77b6.png

六、webpack性能优化-tree shaking(树摇)

tree shaking:去除应用程序中没有使用到的无用代码

前提:

1、使用 ES6 模块化    

比如可以使用import,export。 require不可以

2、开启 **production**环境

这样就会自动把无用代码去掉

作用:减少代码体积

如果js代码中引入add,没有引入mul。但是都被打包进来,说明这里就是有问题的

ba6f81e4793f41bb97ef8a164039194e.png

解决方法:通过树摇来去除无用代码

回到编辑器,在mathUtils.js中注释之前的代码

4a770468a5984a3b9e60aa9df2cd942a.png

分别写入ES6语法

export function add(num1,num2){
  return num1 + num2
}
export function mul(num1,num2){
  return num1 * num2
}

如果这里是development

120c7f84b8914deda0e5d0428a06444c.png

process.env.NODE_ENV = 'developent'

cee29308b6a8466ebac3672517b2a843.png

这里来打包一下是不是可以打包出来

d9dc8d78b23c47b688abc7ea73b7ec2e.png

可以看到已经成功打包完成,但是这里只想引入add,并不想引入mul。需要通过树摇来引入

把mode换成production

0b9712115c6e4427b48ddb312e9ad1ff.png

打包一下,可以看到里面是存在mul

78082b7f50dc4d44af902fb52a0c8c95.png

这里再注释mul

71d3f781eea54e22ba4c0a94f0579763.png

再次打包,会发现已经找不到mul了

22b2f283fe8e45ffb76d0edce3023917.png

而且会自动清除你的注释

在 package.json 中配置:

"sideEffects": false表示所有代码都没有副作用(都可以进行 tree shaking)

这样会导致的问题:可能会把 css / @babel/polyfill 文件排挤掉(副作用)

所以可以配置"sideEffects": ["*.css", "*.less"]:不会对css/less文件tree shaking处理

cd84fda4c767441e808b9fdcfea1b091.png

七、code split(代码分割)

为什么要使用代码分割?

在vue单页应用中,若不做任何处理,所有vue文件会打包为一个文件,这个文件非常的大,造成网页在首次进入时比较缓慢。做了代码分割后,会将代码分离到不同的bundle中,然后进行按需加载这些文件,能够提高页面首次进入的速度,网站性能也能够得到提升。

随着应用扩展,包(bunle)会越来越大。尤其是如果引入了庞大的第三方库。你必须留意你引入的包的大小。防止你打包之后,app加载需要太长时间。

为了防止弄出来一个大包,代码分割是一个比较好的解决办法。代码分割是Webpack和Browserify(通过factor-bundle)的一个特性。允许创建多个包,然后在运行时(runtime)加载。

代码分割可以帮助App实现『懒加载』当前用户需要的那一部分,而不必全部加载。这样动态加载能提高应用性能表现。

简单来说就是把一个js分割成多个小js然后同时运行,类似于异步操作

第一种方法:多入口拆分

把mathUitls.js名字也放入其webpack.config.js的入口文件中:

entry: {
    index: './src/index.js',
    mathUtils: './src/mathUtils.js'
  },

0a722b9654f3480c8fddf8e31be1209e.png

output: {
    // [name]:取文件名
    filename: 'js/[name].[contenthash:10].js',
    path: path.resolve(__dirname, 'dist')
  },

37dc717fad384b26afc15984e118c100.png

打包完成后即可分离开来

957c8558fa624a8899eb1c48fc0c33ba.png

第二种方法:optimization

optimization: {
    splitChunks: {
      chunks: 'all'
    }
  },

feb570aca20b4a8382ae7e64cbbbcf77.png

all:把所有的东西全部拆开

!!!注意:

92768081df184d8c9317b658abead64b.png

63004ef8f8874558b981902ca5b24da1.pngade3c65fddef4871b5258b9a94abac38.png

a5ef106a867c4c44b2949466393f40fe.png

因为在项目中通常只会引入一个入口文件。

这样就可以打包了

bc530decd7854ecfacb5bfaa7bf6f386.png

092e4f9c981544268feeebe8f9f5bd40.png

dbad71f23bfe46c1b74fd11d6a5c45f9.png

output.filename 的输出文件名是 [name].min.js,[name] 根据 entry 的配置推断为 index,所以输出为 index.min.js;

第三种方法:import动态导入语法

7aed49ec4df940bf88fa86207017b8e8.png

如果是普通打包的话会将mathUtils.js文件打包到index.js文件里

3a0e6acc6cfb4ef68d4f4e0caf052932.png

所以我们可以使用动态导入语法去把它单独导出来

1fd5a024ed3544129a29be91cc4abdd3.png

import('./mathUtils').then(({add,mul})=>{
    console.log(add(300,200));
}).catch(()=>{
    console.log('文件加载失败');
})

再次进行打包

2db33b22eced46688a565b3afd9ffd55.png

b2c71dd873ac43539bf7f5701152e243.png

但是这里会发现只看名字并不能分清楚哪个对哪个

所以要以注释的方式添加一个webpackChunkName

/*webpackChunkName:'mathUtils'*/
   webpackChunkName:指定test单独打包后文件的名字
import(/*webpackChunkName:'mathUtils'*/'./mathUtils').then(({add,mul})=>{
    console.log(add(300,200));
}).catch(()=>{
    console.log('文件加载失败');
})

再次打包npm run build

可以看到名字已经更改完成

70a8ece84c054f7faa1b5b10e457a3b0.png


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
2月前
|
JavaScript
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
这篇文章是关于如何在webpack环境中配置Vue.js,包括安装Vue.js、解决报错、理解el与template的区别、使用SPA模式、抽离模板为对象、封装为单独的js文件、安装vue-loader时遇到的问题及解决方案,以及整个过程的总结。
72 2
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
|
3月前
|
JavaScript 测试技术 Windows
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
本文介绍了如何使用vue-cli和webpack为Vue项目配置不同的生产和测试环境,包括修改`package.json`脚本、使用`cross-env`处理环境变量、创建不同环境的`.env`文件,并在`webpack.prod.conf.js`中使用`DefinePlugin`来应用这些环境变量。
116 2
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
|
2月前
|
JavaScript
vue3完整教程从入门到精通(新人必学2,搭建项目)
本文介绍了如何在Vue 3项目中安装并验证Element Plus UI框架,包括使用npm安装Element Plus、在main.js中引入并使用该框架,以及在App.vue中添加一个按钮组件来测试Element Plus是否成功安装。
73 0
vue3完整教程从入门到精通(新人必学2,搭建项目)
|
2月前
|
JavaScript Java CDN
vue3完整教程从入门到精通(新人必学1,vue3快速上手)
本文提供了Vue 3从入门到精通的完整教程,涵盖了创建Vue应用、通过CDN使用Vue、定义网站以及使用ES模块构建版本的步骤和示例代码。
173 0
vue3完整教程从入门到精通(新人必学1,vue3快速上手)
|
2月前
|
资源调度 JavaScript PHP
Vue3+ element plus 前后分离admin项目安装教程
Vue3+ element plus 前后分离admin项目安装教程
46 0
|
4月前
|
前端开发 JavaScript API
|
4月前
|
移动开发 JavaScript 编译器
Vue3 系列教程 — Vue 3 简介
Vue3 系列教程 — Vue 3 简介
|
4月前
|
JavaScript 前端开发 开发者
Vue3 系列教程 — 为什么选择 Vue 框架? (开篇)
Vue3 系列教程 — 为什么选择 Vue 框架? (开篇)
|
4月前
|
JavaScript 前端开发 API
解锁前端开发新境界:Vue.js携手Webpack,打造高效构建流程,你的项目值得拥有!
【8月更文挑战第30天】随着前端技术的发展,模块化与组件化趋势愈发显著。Vue.js 以其简洁的 API 和灵活的组件系统,深受开发者喜爱;Webpack 则凭借强大的模块打包能力成为前端工程化的基石。两者结合,不仅简化了组件编写与引用,还通过模块热替换、代码分割等功能大幅提升开发效率。本文将通过具体示例,展示如何利用 Vue.js 和 Webpack 构建高效、有序的前端开发环境。从安装配置到实际应用,逐步解析这一组合的优势所在。
49 0
|
4月前
|
JavaScript 测试技术
在不同 webpack 版本的 Vue 项目中配置 Storybook
在不同 webpack 版本的 Vue 项目中配置 Storybook
下一篇
无影云桌面