放肆青春的博客
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)

放肆青春

一个前端菜鸟的技术成长之路
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)
  • 技术汇总

    • 技术总结
    • 技术文章
  • 技术术语

  • 技术方案

    • 技术场景汇总
    • 技术方案

    • 前端方案

      • 吸顶
      • 前端权限管理
      • 组件
      • 组件库
        • 组件库
          • 组件库按需加载原理
          • 组件升级
    • 三方平台

    • 图片方案

    • 文件方案

  • 技术点

  • 设计模式及原则

    • 设计模式
    • 创建型模式

    • 结构型模式

    • 行为型模式

    • 设计原则
  • technology
放肆青春
2022-01-14

组件库

# 组件库

# 组件库按需加载原理

组件库按需加载主要目的就是为了减少项目构建打包产物的大小,提高项目线上首屏渲染速度,减少白屏时间,减少流量消耗。

目前按需加载有两种方式实现。

  1. 手动加载

以 vant 为例子:

import Button from "vant/lib/button";
import "vant/lib/button/style";
1
2
  1. 自动加载:

(1) 使用 babel-plugin-import 插件来自动按需引入

babel-plugin-import 是 ant-design 团队出的一个 babel 插件,主要用于模块的按需加载。其原理就是将直接引入的方式通过 babel 转化成按需引入的方式。如果 css 也需要按需加载,也会注入 css 引用代码。

babel-plugin-import 插件的核心原理如图:

image

参数主要包括:

{
  "libraryName": "vant", // 组件库名称,对应 import 语法中的包名
  "libraryDirectory": "lib", // 编译之后各个组件单元所在文件夹名称
  "style": true, // 是否引入组件对应样式文件,也可以传入 less 来引入 less 文件
  "styleLibraryDirectory": "", // 编译之后引入的组件样式文件所在文件夹名称
  "camel2DashComponentName": false, // 是否将驼峰命名的导入变量转换为对应的横线连接命名的文件名
  "customName": (name, file) => { return `vant/lib/${name}` }, // 自定义编译之后引入的组件名
  "customStyleName": (name, file) => { return `vant/lib/css/${name}` }, // 自定义编译之后引入样式文件的名称
}

1
2
3
4
5
6
7
8
9
10

(2) 提供 es module 版本,开启 tree shaking

这个方法只针对于 js, 对于样式的按需加载仍需要手动引入。 当然 babel-plugin-import 和 tree shaking 也可以并存使用。但大部分情况并存使用与单独使用体积差距不是很大。

Webpack 怎么知道有没有 ES module 或 CommonJS module,其实通过组件库 package.json 中相关字段判断出来的:

CommonJS module:package.json 的 main:"lib/index.js"

ES module:package.json 的 module:"es/index.js"

# 组件升级


参考:组件库按需加载原理分析 (opens new window)

更新时间: 2/24/2022, 7:37:44 PM
组件
阿里相关业务

← 组件 阿里相关业务→

最近更新
01
前端权限管理
02-24
02
vue2指令
02-24
03
vue2 hook
02-24
更多文章>
Theme by Vdoing | Copyright © 2019-2022 放肆青春
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式