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 相关文章推荐
jQuery 使用个人心得
Feb 26 Javascript
JavaScript 学习小结(适合新手参考)
Jul 30 Javascript
在图片上显示左右箭头类似翻页的代码
Mar 04 Javascript
JQuery中SetTimeOut传参问题探讨
May 10 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
Jun 13 Javascript
JQUERY简单按钮轮换选中效果实现方法
May 07 Javascript
vue.js实现简单轮播图效果
Oct 10 Javascript
vue2.0 和 animate.css的结合使用
Dec 12 Javascript
node打造微信个人号机器人的方法示例
Apr 26 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
浅谈Javascript中的对象和继承
Apr 19 Javascript
17道题让你彻底理解JS中的类型转换
Aug 08 Javascript
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
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
PHP7新特性简述
2017/06/11 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
简单实现python爬虫功能
2015/12/31 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python实现网站微信登录的示例代码
2019/09/18 Python
python 下划线的不同用法
2020/10/24 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
模具毕业生推荐信
2014/02/15 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
2015年公务员工作总结
2015/04/24 职场文书
2016年国培研修日志
2015/11/13 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
详解Oracle块修改跟踪功能
2021/11/07 Oracle