码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【elementui源码解析】如何实现自动渲染md文档-第一篇


    文章目录

    目录

    背景

    获取源码

    代码分析


    所有章节:

    • 【elementui源码解析】如何实现自动渲染md文档-第二篇
    • 【elementui源码解析】如何实现自动渲染md文档-第三篇
    • 【elementui源码解析】如何实现自动渲染md文档-第四篇

    背景

    之前基于vant3的源码开发过二次开发过组件,其中vant实现了将md文档渲染到界面上,有天突发奇想想知道这是如何实现的将md文档渲染到界面上的,因为平时开发中使用elementui占多数,所以就以elementui为研究对象。

    获取源码

    • 源码:elementui2源码地址:点我前往
    • 安装依赖:这里可能会遇到一些问题 一些说明参考源码中的 .github/CONTRIBUTING.zh-CN.md文件夹的“开发环境搭建” 根据这里的提示来安装依赖。
    • 运行:npm run dev
    • 如果有遇到安装依赖时报错,一般问题都是node-sass和本地的node版本不符合。首先去node的git库查看对应版本node-sass的git库,一般拉下来的elementui的4.11.0,我的做法是先降低本地的node版本,执行一遍yarn,但是项目使用的eslint版本需要14版本的node,所以再切换到14版本的node再执行yarn。注意:如果执行yran的过程中遇到报错,每次都要执行 yarn cache clean 再重新执行yarn,不然有可能会下载下来的依赖还是错的。(这里有问题欢迎评论区提问)

    图1

    项目启动成功打开http://localhost:8085/

    图2

    代码分析

    首先查看根目录的package.json 

    查看dev命令:可以看到第一段是“npm run boostrap” 这段从图中可以看出就是执行“yarn || npm i”。接着往下看,出现了命令"npm run build;file";其中的第一段代码也就是绿色框中的“node build/bin/iconInit.js” 这就是本文分析的重点。

    图3

    找到该文件,我们来逐行分析。

    • 第3、4、5行代码引入了nodejs模块中的postcss、fs、path模块。
    • 第6行用fs模块找到icon.scss文件。如图5,这里面定义了elementui中所有的icon图标。
    • 第7行用postcss.parse函数将css字符串解析为postcss可以处理的对象,就相当于将字符串变成了对象,从其中的nodes我们可以获取到所有的定义的icon的名字,如图6。
    • 11-19行代码就是循环nodes,12行的正则就是匹配el-icon的所有图标比如:.el-icon-delete-solid:before,.el-icon-delete:before等,然后捕获“el-icon”之后“:before”之前的内容,比如捕获“delete-solod”、“delete”,然后push到classList中。
    • 最后22行代码就是将classList写入icon.json文件中。

    图4

    图5

    图6

    至于最终生成的这个icon.json文件有什么作用,我们需要等到介绍“node build/bin/build-entry.js”命令时再揭晓。

  • 相关阅读:
    Vue 3是一个错误,我们不应该再犯。
    vue3【生命周期讲解-详】
    Java中过滤器与拦截器的使用
    Mysql进阶【3】论述Mysql优化
    Python:每日一题之顺子日期
    [附源码]计算机毕业设计springboot基于VUE的网上订餐系统
    [MRCTF2020]Ezpop-1|php序列化
    离散化算法
    vue3 全局方法挂载
    抖音本地生活服务商申请怎么做?无保证金的申请方法来了
  • 原文地址:https://blog.csdn.net/huiaixing/article/details/139562993
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号