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 相关文章推荐
Javascript动态创建div的方法
Feb 09 Javascript
js实现格式化金额,字符,时间的方法
Feb 26 Javascript
JQuery实现带排序功能的权限选择实例
May 18 Javascript
你知道setTimeout是如何运行的吗?
Aug 16 Javascript
jQuery Dialog 取消右上角删除按钮事件
Sep 07 Javascript
jQuery中的100个技巧汇总
Dec 15 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
Dec 25 jQuery
layui中select,radio设置不生效的解决方法
Sep 05 Javascript
vue实现输入框自动跳转功能
May 20 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
Jul 07 Javascript
JavaScript中的宏任务和微任务详情
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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
phpBB BBcode处理的漏洞
2006/10/09 PHP
php递归创建目录的方法
2015/02/02 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
php 中的closure用法详解
2017/06/12 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
学习ExtJS table布局
2009/10/08 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
Python 自由定制表格的实现示例
2020/03/20 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
打架检讨书800字
2014/01/10 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
医学生求职自荐书
2014/06/12 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
争先创优公开承诺书
2014/08/30 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
大专护理专业自荐信
2015/03/25 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL