.md是什么文件_Element-UI源码阅读之md显示到页面
入口文件
首先,看一个项目的入口,可以从package.json中去看它的运行命令
可以看到dev那行,执行了很多脚本: npm run bootstrap && npm run build:file && cross-env NODE_ENV=development webpack-dev-server --config build/webpack.demo.js & node build/bin/template.js
npm run bootstrap
就是安装项目所需依赖, 重点就是webpack-dev-server --config build/webpack.demo.js
项目使用webpack执行build/webpack.demo.js,生成一个服务器,这个是项目的打包脚本js。
可以看到entry指向了./examples/entry.js
,那么这个是我们的入口文件了。
entry.js
可以看到这里就是一个普通Vue的项目了,引用了许多的模块,注册了一些自己编写的Vue组件,重点需要看的是router。
router.config.js
这是对项目边栏,导航、主题等进行国际化渲染的路由。
这个对应的是项目的内容,也就是我们看到的demo演示部分。那么它是怎么把 .md
的文件渲染到页面并且达到既显示demo效果,又有源代码的呢?
能做到这一点只能在编译的时候就对md
的文件进行分析,分析出code
部分,然后对code
部分进行一些处理。这里element-ui在原来mdloader的基础上,添加一些项目需要用到的需求代码。我们回到webpack-demo.js
md-loader/index.js
它的入口文件是
index.js
引入了config.js
md-loader/config.js
引用了许多的依赖包,使用了markdown-it-chain
的链式调用,配置了一对东西。可以去看看这个模块的使用:预览
其实就是一个把.md
解析为一个树行结构,再通过通过一些函数对树进行解析,拼接dom,生成dom树的作用,这里面的一些api需要自己去看才能理解。 简而言之,就是解析的代码,element-ui的工程师,对它扩展了一些功能,让它把code
部分拼接成:
<demo-block>demo组件组件代码描述
</demo-blcok>
最后的拼接主要看index.js
function(source) {const content = md.render(source);const startTag = '<!--element-demo:';const startTagLen = startTag.length;const endTag = ':element-demo-->';const endTagLen = endTag.length;let componenetsString = '';let id = 0; // demo 的 idlet output = []; // 输出的内容let start = 0; // 字符串开始位置let commentStart = content.indexOf(startTag);let commentEnd = content.indexOf(endTag, commentStart + startTagLen);while (commentStart !== -1 && commentEnd !== -1) {output.push(content.slice(start, commentStart));const commentContent = content.slice(commentStart + startTagLen, commentEnd);const html = stripTemplate(commentContent);const script = stripScript(commentContent);let demoComponentContent = genInlineComponentText(html, script);const demoComponentName = `element-demo${id}`;output.push(`<template slot="source"><${demoComponentName} /></template>`);componenetsString += `${JSON.stringify(demoComponentName)}: ${demoComponentContent},`;// 重新计算下一次的位置id++;start = commentEnd + endTagLen;commentStart = content.indexOf(startTag, start);commentEnd = content.indexOf(endTag, commentStart + startTagLen);}// 仅允许在 demo 不存在时,才可以在 Markdown 中写 script 标签// todo: 优化这段逻辑let pageScript = '';if (componenetsString) {pageScript = `<script>export default {name: 'component-doc',components: {${componenetsString}}}</script>`;} else if (content.indexOf('<script>') === 0) { // 硬编码,有待改善start = content.indexOf('</script>') + '</script>'.length;pageScript = content.slice(0, start);}output.push(content.slice(start));return `<template><section class="content element-doc">${output.join('')}</section></template>${pageScript}`;
};
这样接的vue组件就会被vue-loader来处理,这样就形成了我们看到的效果。
附上自己分离它逻辑的demo: demo链接 预览链接
.md是什么文件_Element-UI源码阅读之md显示到页面相关推荐
- 直播网站源码,使用nodejs显示HTML页面
直播网站源码,使用nodejs显示HTML页面实现的相关代码 1.初始化node项目 在命令行输入: npm init 2.安装express 在命令行输入: npm install express ...
- 渲染引擎分析 - 鸿蒙(OpenHarmony) JS UI 源码阅读笔记
作者:门柳 鸿蒙是华为研发的新一代终端操作系统,能适用于 IoT.手表.手机.Pad.电视等各种类型的设备上,扛起"国产操作系统"的大旗,也遭受了很多非议.2021 年 6 月初发 ...
- 有道云笔记 - Markdown模板(文首附markdown源码,即.md文件)
有道云笔记 - Markdown模板 附 本文的Markdown源码镜像: https://github.com/yanglr/AlgoSolutions/blob/master/Youdao_Not ...
- PHP 八羊闪电本地相册图片查看器V1 PHP极简代码直接查看本地文件夹图片 源码下载!
该源码,直接读取本地IMGAGES文件夹的图片,直接显示在相册,点击放大查看,非常方便,非常适合二次开发,但是不适合小白.没有做UI和设计,比较简陋,所以仅仅售价10元钱,想要的就拿去,不想要的就别拍 ...
- 星宿UI源码V1.3 wordpress系统资讯资源下载小程序源码开源下载
更新内容: 新增:金刚区支持跳转业务域名(个人小程序不支持) 新增:wordpress后台公众号文章(焦点)开关 新增:资源下载提取密码 新增:支持wordpress文章中添加小程序流量主AD,图组 ...
- QT中在设计师Design进行界面开发后查看ui源码
1.有时想在qt代码中实现某些功能,像我遇到的情况就是想在界面上实现添加一个水平的空白控件,也就是设计师里面的Horizontal Spacer控件,如图1 然后将其添加到布局里面,效果如图2 图1 ...
- Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)
场景 Winform中DevExpress的TreeList的入门使用教程(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- SpringBoot文件上传源码解析
一.SpringMVC文件上传源码分析前言(这部分我觉得原作者写的很好) 该如何研究SpringMVC的文件上传的源码呢? 研究源码并不是仅仅知道程序是怎样运行的,而应该从宏观的角度.不同的立场去看待 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http:// ...
最新文章
- MPB:河湖着生硅藻样品采集、永久玻片制作及鉴定
- 黄仁勋把自己做成了虚拟娃娃
- java ee s2sh复习题_JavaEESSH框架答案试题题目及答案,期末考试题库,章节测验答案...
- android 关闭多点触控_Cocos Creator关闭多点触摸的问题
- Restful对于URL的简化
- Leetcode 系列 | 反转链表
- android uber源码,Uber SDK in android
- 全局变量局部变量ScriptCase中的全局变量、局部变量
- ipv6的127位掩码如何表示_子网掩码为255.255.255.0代表的意思是什么?
- 不能执行已释放 Script 的代码
- 常用几个UITableView,UICollectionView UIScrollView关键点
- 【Python】【有趣的模块】【requests】【一】HTTP头信息总结
- 中国纺织行业前景动态分析与投资战略研究报告2022-2028年
- 详解Java的IO流Part7:PrintStream打印流【完结】
- UML教程8:构件图 部署图 附录
- windows下面刷新dns
- 完美卸载itunes
- 关于安卓毛玻璃实现(一)动态毛玻璃
- BFF —— Backend For Frontend
- 关于指针所占的字节数
热门文章
- 建模:确定服务的边界——《微服务设计》读书笔记
- 文档数据库RavenDB-介绍与初体验
- element-ui Notification重叠问题,原因及解决办法
- mysql 一主一备_Mysql一个主一备
- Android之实现点击布局缩小然后再放大动画
- C语言之字符数组在if{}里面赋值给char *引发的问题
- Android之什么场景该使用单例模式总结
- Android之状态栏通知Notification、NotificationManager详解
- Android之Android Studio三种方式导入外部资源 以及 报错处理
- 【iVX 初级工程师培训教程 10篇文拿证】03 事件及猜数字小游戏