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写一个字符串转成驼峰的实例
Jun 21 Javascript
JavaScript全排列的六种算法 具体实现
Jun 29 Javascript
jQuery搜索同辈元素方法
Feb 10 Javascript
JavaScript中匿名函数的用法及优缺点详解
Jun 01 Javascript
JavaScript中的this使用详解
Jul 27 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
Aug 12 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
Sep 01 Javascript
vue-router启用history模式下的开发及非根目录部署方法
Dec 23 Javascript
JS高阶函数原理与用法实例分析
Jan 15 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
Sep 24 Javascript
js实现鼠标拖拽div左右滑动
Jan 15 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
php中spl_autoload详解
2014/10/17 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python通过yield实现数组全排列的方法
2015/03/18 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
公司行政助理岗位职责
2015/04/11 职场文书
爱国电影观后感
2015/06/19 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python