1. noParse

作用主要是过滤不需要解析的文件,比如打包的时候依赖了三方库(jquyer、lodash)等,而这些三方库里面没有其他依赖,可以通过配置noParse不去解析文件,提高打包效率。

是module中的一个属性,设置一个正则表达式,过滤多个库以|分割

module: {
noParse: '/jquery|lodash/',
// rules:[]
}

2. 包含和排除目录

指定loader解析的规则,配置包含排除目录一般两者写其一就行。

{
test: /\.js$/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'], // 预设,转换js语法
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }], // 解析类的装饰器
["@babel/plugin-proposal-class-properties", { "loose": true }], // 解析类的属性
"@babel/plugin-transform-runtime", // 解析promise,Generator等新的API
]
}
},
include: path.resolve(__dirname, 'src'),
exclude: /node_modules/
}

3. IgnorePlugin

该插件是webpack的内置插件,用于忽略某些特定的模块,不被webpack打包进去。

在实际开发项目时,moment库是非常常用的处理时间的库,虽然设置了语种为中文zh-cn,但是在打包的时候,还是会将所有语言都打包进去。就导致包很大,打包速度慢,locale 目录中存放的是多语种的语言包,不希望全部被打包进文件。此时就可以配置下IgnorePlugin

// src/index.js

import moment from 'moment'

// 忽略locale后,就必须手动单独引入需要的语言包
import 'moment/locale/zh-cn'; moment.locale('zh-cn'); //设置中文
let r = moment().endOf('day').fromNow();
console.log(r);
// webpack.config.js
let Webpack = require('webpack');
module.exports = {
plugins:[
new Webpack.IgnorePlugin(/\.\/locale/,/moment/), // locale 目录中存放的是多语种的语言包,不希望全部被打包进文件
]
}

4. happypack

多线程打包,多用于大型项目,因为在项目很小的时候,效果反而会慢,因为而分配线程,也会消耗时间。

npm install happypack
let HappyPack = require('happypack');

module.exports = {
// ...
module:{
rules:[
{
test:/\.js$/,
use:'HappyPack/loader?id=js' // id=js 代表打包js
},
{
test:/\.css$/,
use:'HappyPack/loader?id=css' // id=css 代表打包css
}
]
},
plugins:[
new HappyPack({
id:'css', // 打包css
use:['style-loader','css-loader']
}),
new HappyPack({
id:'js', // 打包js
use:[{ // 原本rules中 loader的配置即可
loader:'babel-loader',
options:{
presets:['@babel/presets-env', '@babel/presets-react']
}
}]
})
]
}

5. DllPlugin动态链接库

之前专门整理过完整的一篇关于DllPlugin动态链接库的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。

webpack性能优化方式之dll--- webpack.dll.config.js

6. 热更新

之前专门整理过完整的一篇关于webpack热更新的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。

webpack4.15.1 学习笔记(三) — 模块热替换HMR

7. 开发环境 tree-shaking

之前专门整理过完整的一篇关于webpack tree-shaking的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。

webpack4.15.1 学习笔记(四) — Tree shaking

8. 抽离公共代码

之前专门整理过完整的一篇关于webpack抽离公共代码的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。

webpack4.15.1 学习笔记(六) — 代码拆分(Code Splitting)

9. 懒加载

之前专门整理过完整的一篇关于webpack懒加载的学习笔记,由于时间和精力的关系,不在赘述,感兴趣的同学可以跳转链接了解一下。

webpack4.15.1 学习笔记(七) — 懒加载(Lazy Loading)

webpack打包优化点的更多相关文章

  1. Webpack 打包优化之速度篇

    在前文 Webpack 打包优化之体积篇中,对如何减小 Webpack 打包体积,做了些探讨:当然,那些法子对于打包速度的提升,也是大有裨益.然而,打包速度之于开发体验和及时构建,相当重要:所以有必要 ...

  2. Webpack 打包优化之体积篇

    谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝 ...

  3. 记一次webpack打包优化

    未进行打包优化的痛点: 随着项目的不断扩大,引入的第三方库会越来越多,我们每次build的时候会对所有的文件进行打包,耗时必定很长,不利于日常开发. 解决思路: 第三方库我们只是引入到项目里来,一般不 ...

  4. webpack打包优化之外部扩展externals的实际应用

    目录 前言 externals定义 用法 string array object function regex 实际案例 打包时间 打包之后包的大小 浏览器加载 需要注意 参考 前言 使用vue-cl ...

  5. [转] Webpack 打包优化之体积篇

    谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝 ...

  6. webpack打包优化并开启gzip

    应用场景:项目使用webpack2.x进行打包,打包后静态资源通过nginx转发配置: 问题:webpack打包后的资源文件特别,特别大,没打包之前页面一个页面js有2M左右(其中已经抽离了css)? ...

  7. 基于CommonsChunkPlugin,webpack打包优化

    前段时间一直在基于webpack进行前端资源包的瘦身.在项目中基于路由进行代码分离,http://www.cnblogs.com/legu/p/7251562.html.但是打包的文件还是很大,特别是 ...

  8. webpack 打包优化的四种方法(多进程打包,多进程压缩,资源 CDN,动态 polyfill)

    如今,webpack 毫无疑问是前端构建领域里最耀眼的一颗星,无论你前端走哪条路线,都需要有很强的webpack 知识.webpack 的基本用法这里就不展开讲了.主要探讨一下如何提高 webpack ...

  9. (webpack系列二)webpack打包优化探索

    虽然webpack的已经升级到了webpack4,而我们目前还在使用webpack3,但其中的优化点都大同小异,升级后同样适用. 性能优化初步原则 减小代码量 减小请求数 最大化利用浏览器缓存 这三条 ...

随机推荐

  1. Linux定时任务--Crond使用教程

    Linux定时任务--Crond使用教程 1. 介绍Crond crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后 ...

  2. 『现学现忘』Docker基础 — 40、发布镜像到Docker Hub

    目录 1.准备工作 2.Docker登陆命令 3.Docker提交命令 4.总结: 5.补充:docker tag命令 1.准备工作 Docker Hub地址:https://hub.docker.c ...

  3. 全新升级的AOP框架Dora.Interception[6]: 框架设计和实现原理

    本系列前面的五篇文章主要介绍Dora.Interception(github地址,觉得不错不妨给一颗星)的编程模式以及对它的扩展定制,现在我们来聊聊它的设计和实现原理.(拙著<ASP.NET C ...

  4. InheritableThreadLocal 在线程池中进行父子线程间消息传递出现消息丢失的解析

    在日常研发过程中,我们经常面临着需要在线程内,线程间进行消息传递,比如在修改一些开源组件源码的过程中,需要将外部参数透传到内部,如果进行方法参数重载,则涉及到的改动量过大,这样,我们可以依赖Threa ...

  5. python:**也不过如此嘛,这不也被我采集下来啦~

    前言 嗨喽!大家好呀,这里是小熊猫 知识点: 基本流程 fiddler抓包 开发环境: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 requests 第三方模块 如果安装 ...

  6. hs-black 杂题选讲

    [POI2011]OKR-Periodicity 考虑递归地构造,设 \(\text{solve(s)}\) 表示字典序最小的,\(\text{border}\) 集合和 \(S\) 的 \(\tex ...

  7. 交替方向乘子法(Alternating Direction Multiplier Method,ADMM)

    交替方向乘子法(Alternating Direction Multiplier Method,ADMM)是一种求解具有可分结构的凸优化问题的重要方法,其最早由Gabay和Mercier于1967年提 ...

  8. 异常注意事项_多异常的捕获处理和异常注意事项_finally有return语句

    异常注意事项_多异常的捕获处理 多个异常使用捕获又该如何处理呢? 1. 多个异常分别处理 2. 多个异常一次捕获,多次处理 3. 多个异常一次捕获一次处理 public class Demo01Exc ...

  9. 4-11 Spring Security及SSO

    1. 关于用户身份认证与授权 Spring Security是用于解决认证与授权的框架. 在根项目下创建新的csmall-passport子模块,最基础的依赖项包括spring-boot-starte ...

  10. Java学习day09—-封装和继承

    封装 1.封装 1.1 封装的概念和实现 封装: 属性私有:将属性使用private修饰,表示此属性只能在本类中访问,不让外部直接访问 方法公开:针对每一个属性编写一对公开的方法 get set 分别 ...