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操作Cookies的实现代码
Oct 09 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
Aug 26 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
Oct 22 Javascript
Highcharts入门之基本属性
Aug 02 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
Sep 12 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
Nov 11 Javascript
Vue.js上下滚动加载组件的实例代码
Jul 17 Javascript
一个简易的js图片轮播效果
Jul 22 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
Apr 23 Javascript
vue.js学习笔记之v-bind和v-on解析
May 03 Javascript
在Vue中使用antv的示例代码
Jun 29 Javascript
js canvas实现俄罗斯方块
Oct 11 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
高级护理专业大学生求职信
2013/10/24 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
质量月活动总结
2014/08/26 职场文书
计划生育证明格式范本
2014/09/12 职场文书
项目转让协议书
2014/10/27 职场文书
工资证明格式模板
2015/06/12 职场文书
人事任命书范本
2015/09/21 职场文书