当前位置: 首页 > article >正文

Element UI 打包探索【1】

目录

第一个命令

第二个命令

node build/bin/iconInit.js

node build/bin/build-entry.js 

node build/bin/i18n.js 

node build/bin/version.js

总结


最近在接触组件库的项目,所以特意拿来Element UI借鉴学习一下,它算是做前端的同学们离不开的一个优秀开源库。

我们探究的版本是element-ui@2.15.14(项目中用的2.x.x版本,所以直接用的这个)

根据工程介绍README,我们直接看dist命令

npm run dist
"dist": "npm run clean && npm run build:file && npm run lint && webpack --config build/webpack.conf.js && webpack --config build/webpack.common.js && webpack --config build/webpack.component.js && npm run build:utils && npm run build:umd && npm run build:theme",

第一个命令

"clean": "rimraf lib && rimraf packages/*/lib && rimraf test/**/coverage"

有关于rimraf是一个依赖,用于递归删除一个文件夹以及其子文件夹。感兴趣的朋友可以看看这篇文章rimraf

结论:说明clean命令就是删除lib文件夹以及packages目录下子目录中的lib文件夹和test目录下子目录中的coverage文件夹 *和**都是shell命令的通配符

why:先讲完我们再回头来看

tip:这里需要提一下脚本命令中 & 和 && 的区别

&是所有的命令同时执行,而&&是前一个命令执行完了才执行后面一个,大家可以根据需要使用

第二个命令

"build:file": "node build/bin/iconInit.js & node build/bin/build-entry.js & node build/bin/i18n.js & node build/bin/version.js"

👆🏻前面提过&是代表同时执行

node build/bin/iconInit.js

输入文件:packages/theme-chalk/src/icon.scss

输出文件:examples/icon.json

文件都是通过__dirname绝对路径来取

icon.json文件存的是一个带有el-icon...:before的Selector名数组,下面是关键代码

nodes.forEach((node) => {
  var selector = node.selector || '';
  var reg = new RegExp(/\.el-icon-([^:]+):before/);
  var arr = selector.match(reg);

  if (arr && arr[1]) {
    classList.push(arr[1]);
  }
});
arr打印结果

结论:生成icon.json文件保存对应的Selector名(eleme、platform-eleme...)

why:先讲完我们再回头来看

node build/bin/build-entry.js 

将组件库输出到src/index.js文件中,下面是重点代码

var template = render(MAIN_TEMPLATE, {
  include: includeComponentTemplate.join(endOfLine),
  install: installTemplate.join(',' + endOfLine),
  version: process.env.VERSION || require('../../package.json').version,
  list: listTemplate.join(',' + endOfLine)
});
  • includeComponentTemplate:保存import Pagination from '../packages/pagination/index.js';的数组

  • installTemplate:保存Pagination的数组 - - 被注册成一个个组件

  • version:版本号

  • listTemplate:是这样Pagination的数组 - - 用于导出组件

结论:生成index.js文件,里面是组件库的注册和导出(当然还有一些通用配置,插件,原型链方法等等)

why:这个可以看结论,不赘述

node build/bin/i18n.js 

明显是有关于国际化的操作

输入文件:examples/i18n/page.json

输出文件:/examples/pages/${ lang.lang }/${ page }.vue

对应的一种语言生成一套vue 

结论:生成json中对应的一个个vue文件

why:先讲完我们再回头来看

node build/bin/version.js

输出文件:examples/versions.json

结论:生成json中对应的一个个版本号

why:这个没啥可以为什么的,我们也基本不大会用


由于篇幅较长,下篇文章咱们继续探讨!!

总结

本篇文章只讲了2个命令还有3个why的事情没讲,下篇我们继续。

🔽直接看这里

Element UI 打包探索【2】

如果觉得有收获,麻烦给个赞和关注。你的鼓励是我写作的动力,大家一起学习一起进步。


http://www.kler.cn/a/410836.html

相关文章:

  • 加速科技精彩亮相中国国际半导体博览会IC China 2024
  • 滑动窗口最大值(java)
  • React表单联动
  • 非交换几何与黎曼ζ函数:数学中的一场革命性对话
  • 前端:JavaScript (学习笔记)【2】
  • springboot集成shiro和前后端分离配置
  • bridge-multicast-igmpsnooping
  • 第二十八章 TCP 客户端 服务器通信 - JOB命令示例
  • Python和R荧光分光光度法
  • 基于YOLOv8深度学习的农作物番茄成熟度检测系统研究与实现(PyQt5界面+数据集+训练代码)
  • jmeter基础06_(练习)常见的http请求
  • Reactor 模式的理论与实践
  • 即时通讯平台-音视频即时通讯平台就选WorkPlus
  • 虚拟苹果系统MacOS中新建自定义C++Dylib并用C++测试程序测试
  • QT 跨平台实现 SSDP通信 支持多网卡
  • 【ArcGISPro】使用AI提取要素-土地分类(sentinel2)
  • 用树莓派Pico控制8×8 LED点阵屏:深入解析C++核心知识与动态显示实现
  • 深度学习——3种常见的Transformer位置编码【sin/cos、基于频率的二维位置编码(2D Frequency Embeddings)、RoPE】
  • 突破内存限制:Mac Mini M2 服务器化实践指南
  • 提升软件测试报告的质量:Allure2中添加用例失败截图、日志、HTML块和视频的方法
  • 鸿蒙进阶篇-正则
  • 【linux】服务器加装硬盘后如何将其设置为独立硬盘使用
  • Mamba/PyTorch WSL环境配置
  • SQL进阶:如何跳过多个NULL值取第一个非NULL值?
  • Postgresql 获取字段里的字段内容的长度
  • linux实战-黑链——玄机靶场