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 相关文章推荐
如何快速的呈现我们的网页的技巧整理
Jul 01 Javascript
js表数据排序 sort table data
Feb 18 Javascript
js简单实现让文本框内容逐个字的显示出来
Oct 22 Javascript
Javascript中匿名函数的多种调用方式总结
Dec 06 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
Apr 12 Javascript
分享五个有用的jquery小技巧
Oct 08 Javascript
jQuery遍历DOM元素与节点方法详解
Apr 14 Javascript
javascript入门之window对象【新手必看】
Nov 22 Javascript
详解如何从零开始搭建Express+Vue开发环境
Jul 17 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
Mar 06 Javascript
JS实现简易贪吃蛇游戏
Aug 24 Javascript
vue Element-ui表格实现树形结构表格
Jun 07 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
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
python命令行参数用法实例分析
2019/06/25 Python
Python二元赋值实用技巧解析
2019/10/25 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
劳动竞赛活动总结
2014/05/05 职场文书
经营目标责任书
2015/05/08 职场文书
淮海战役观后感
2015/06/11 职场文书
运动会加油稿50字
2015/07/21 职场文书
2016年党员岗位承诺书
2016/03/24 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
vue封装数字翻牌器
2022/04/20 Vue.js