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 相关文章推荐
js中apply方法的使用详细解析
Nov 04 Javascript
javascript在IE下trim函数无法使用的解决方法
Sep 12 Javascript
浅析Node.js 中 Stream API 的使用
Oct 23 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
Jul 10 Javascript
浅析vue中常见循环遍历指令的使用 v-for
Apr 18 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
Dec 06 Javascript
详解在Node.js中发起HTTP请求的5种方法
Jan 10 Javascript
django中使用vue.js的要点总结
Jul 07 Javascript
Vue实现导航栏的显示开关控制
Nov 01 Javascript
JavaScript中使用Spread运算符的八种方法总结
Jun 18 Javascript
JavaScript利用html5新方法操作元素类名详解
Nov 27 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
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
python实现QQ批量登录功能
2019/06/19 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
python定时任务 sched模块用法实例
2019/11/04 Python
python 实现二维列表转置
2019/12/02 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
英国现代绅士品牌:Hackett
2017/12/17 全球购物
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
在C#中如何实现多态
2014/07/02 面试题
11月红领巾广播稿
2014/01/17 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang