webpack4从0搭建组件库的实现


Posted in Javascript onNovember 29, 2020

代码分离

代码分离方法有三种:

  • 入口起点:使用 entry 配置手动地分离代码。
  • 防止重复:使用 SplitChunksPlugin 去重和分离 chunk。
  • 动态导入:通过模块中的内联函数调用来分离代码。

动态导入(dynamic imports)

  • import()
  • require.ensure

预取/预加载模块(prefetch/preload module)

webpack v4.6.0+ 添加了预取和预加载的支持。

在声明 import 时,使用下面这些内置指令,可以让 webpack 输出 "resource hint(资源提示)",来告知浏览器:

  • prefetch(预取):将来某些导航下可能需要的资源
  • preload(预加载):当前导航下可能需要资源

配置项重点详解

(1)mode: "pruduction"
启用 minification(代码压缩) 和 tree shaking (usedExports:true)
自动指定DefinePlugin:process.env.NODE_ENV === 'production'

(2)devtool
source map 简介

生产环境:source-map
开发环境:inline-source-map

(3)optimization
splitChunks

splitChunks: {
 chunks: 'all', // 提取公共模块 loadash
 // 将第三方库(library)(例如 lodash 或 react)提取到单独的 vendor chunk 文件中,是比较推荐的做法
 // 利用 client 的长效缓存机制,命中缓存来消除请求,并减少向 server 获取资源,同时还能保证 client 代码和 server 代码版本一致。
 cacheGroups: {
  vendor: {
   test: /[\\/]node_modules[\\/]/,
   name: 'vendors',
   chunks: 'all'
  }
 }
},

runtimeChunk

runtimeChunk: 'single' // 提取引导模板 将 runtime 代码拆分为一个单独的 chunk

(5)output

// filename: '[name].[contenthash].js', // content hash 内容变化才会变化
filename: 'webpack-numbers.js', 
path: path.resolve(__dirname, 'dist'),

// 暴露 library 这是库名称 import from 'webpackNumbers'
library: 'webpackNumbers', 
libraryTarget: 'umd'

(6)plugins

HashedModuleIdsPlugin

const { HashedModuleIdsPlugin } = require('webpack');

plugins: [
  // 不会因模块增加和减少导致的模块内容变化,增加长缓存命中机制
  new HashedModuleIdsPlugin()
],

BundleAnalyzerPlugin

分析打包代码

const {BundleAnalyzerPlugin} = require('webpack-bundle-analyzer');

plugins: [
  new BundleAnalyzerPlugin()
]

到此这篇关于webpack4从0搭建组件库的实现的文章就介绍到这了,更多相关webpack4搭建组件库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
List the Stored Procedures in a SQL Server database
Jun 20 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
Apr 02 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
May 31 Javascript
深入了解javascript中的prototype与继承
Apr 14 Javascript
jquery获取checkbox的值并post提交
Jan 14 Javascript
简介JavaScript中getUTCMonth()方法的使用
Jun 10 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
Apr 18 Javascript
JavaScript reduce和reduceRight详解
Oct 24 Javascript
JS中的回调函数实例浅析
Mar 21 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
Mar 13 Javascript
Vue组件通信的几种实现方法
Apr 25 Javascript
vue使用element-ui按需引入
May 20 Vue.js
JS指定音频audio在某个时间点进行播放
Nov 28 #Javascript
Vue用mixin合并重复代码的实现
Nov 27 #Vue.js
js实现扫雷源代码
Nov 27 #Javascript
JavaScript字符串转数字的简单实现方法
Nov 27 #Javascript
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 #Vue.js
JavaScript中的Proxy对象
Nov 27 #Javascript
详解JavaScript中的链式调用
Nov 27 #Javascript
You might like
linux下为php添加curl扩展的方法
2011/07/29 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
PHP递归算法的详细示例分析
2013/02/19 PHP
php返回json数据函数实例
2014/10/09 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
python实现单向链表详解
2018/02/08 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
django实现类似触发器的功能
2019/11/15 Python
python实现图片横向和纵向拼接
2020/03/05 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
学期自我鉴定
2013/11/04 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
5s推行计划书
2014/05/06 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
紧急迫降观后感
2015/06/15 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
HTML基础详解(下)
2021/10/16 HTML / CSS