VuePress源码阅读(一)--初探 VuePress

thumb-1920-1107572.png

最近开发和写文章都用到了 VuePress 和 SSR,在深入学习的同时写点文章记录一下

一、最简起步

首先按照 VuePress 的指导创建一个最小的网站:

mkdir vuepress-ssr
cd vuepress-ssr
yarn init -y
yarn add -D vuepress
mkdir docs
echo '# Hello VuePress' > docs/README.md

接着打开 packjge.json 并添加本地调试 & 打包的命令:

"scripts": {
  "docs:dev": "npx --node-arg=--inspect vuepress dev --debug docs",
  "docs:build": "npx --node-arg=--inspect vuepress build --debug docs"
}

ok 这样最简单的准备就搞定了,不过我们暂时不急着调试,可以先来看看代码.

二、CLI外壳 - vuepress

我们打开刚刚创建的项目的 node_modules,找到 vuepress 文件夹:

image-20210114185426058

看到主逻辑文件只有 cli.js 和 index.js 两个,再看看 package.json:

image-20210114185924797

可知我们平常使用的 vuepress 调用的其实就是 cli.js 文件. 再来看看 cli.js 干了什么:

image-20210114200503449

这里的 cli 其实是npm包 CAC (命令行工具)返回的操作实例,这里用到command、option、action 三个方法,执行逻辑在 action 中

暂时忽略命令行相关的预处理和后续处理操作,这里的重点关注 registerCoreCommands 这个方法,上面脚本中的 vuepress dev docsvuepress build docs 的逻辑就在这里的 action 中:

image-20210114201402659

第 38 行开始就将运行方法作为参数放入 wrapcommand 准备执行,dev、build 都来自 node_modules/@vuepress 的 core 文件夹:

image-20210114201607617

也就是说 node_modules/vuepress 其实只是个 CLI 壳子,而真正的 dev、build、eject 逻辑都在 node_modules/@vuepress 中!

接下来我们继续探究 @vuepress 内部的逻辑

三、@vuepress 探究

现在通过 node_modules/@vuepress 的代码来进一步了解:

image-20210114211314418

进入 @vuepress/core 的 index.js:

image-20210114211430226

在这里能看到对 dev 和 build 的预处理相同,都是通过 createApp() 创建一个 app,然后对 app 进行 process 处理, 但是之后 dev 和 build 就开始进入不同逻辑了.

3.1 createApp

createApp 就在 index.js 中,内部返回了 new App(options) 的结果,App类的构造器如下,主要负责环境判断和解析目录参数:

image-20210114212219741

当然 App类携带了很多很多的方法,主最要的 process、dev、build 当然是都包括在内的.

3.2 process

process 则包含比较多功能,经过一番阅读后将每个阶段做的事情描述如下:

截屏2021-01-14_下午11_22_44

现在浏览器打开 chrome://inspect/#devices,然后运行 yarn docs:dev (直接运行 npx --node-arg=--inspect vuepress dev --debug docs 也行),当 Remote Target 出现 Target 时 inspect 进到控制台:

image-20210114224725966

进去之后应该什么都看不到,不慌,回刚刚代码的 process 函数里加上一行 debugger,然后重新运行 yarn docs:dev,现在回到调控制台就可以按照自己的需要调试了:

image-20210114224939498

当执行完 118 行的 await this.resolvePages() 之后就可以看到 pages 添加了一个 Page,也就是我们最简网站的 README 文件中包含的 Hello VuePress.

image-20210114225759622

整个 process 函数走完之后,可以看到在 @vuepress/core 文件夹下生成了临时文件夹 .temp:

image-20210114230232109

process 函数将项目资源 & 配置进行解析,然后通过加载&运行插件,最终生成了临时文件. vuepress dev docsvuepress build docs 共享的逻辑就到此为止了.

接下来 vuepress dev docs 会通过引入 WebpackDevServer 来启动一个服务器, vuepress build docs 会根据 client & server 的不同配置执行 Webpack 打包,最后还会做静态HTML渲染,这些内容会放在下一篇文章中,敬请期待✿✿ヽ(°▽°)ノ✿

欢迎拍砖,觉得还行也欢迎点赞收藏~
新开公号:「无梦的冒险谭」欢迎关注(搜索 Nodreame 也可以~)
旅程正在继续 ✿✿ヽ(°▽°)ノ✿

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容