-
Notifications
You must be signed in to change notification settings - Fork 222
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FIS源码解析-整体架构 #29
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
序言
这里假设本文读者对FIS已经比较熟悉,如还不了解,可猛击官方文档。
虽然FIS整体的源码结构比较清晰,不过讲解起来也是个系统庞大的工程,笔者尽量的挑重点的讲。如果读者有感兴趣的部分笔者没有提到的,或者是存在疑惑的,可以在评论里跑出来,笔者会试着去覆盖这些点。
下笔匆忙,如有错漏请指出。
Getting started
如在开始剖析FIS的源码前,有三点内容首先强调下,这也是解构FIS内部设计的基础。
1、 FIS支持三个命令,分别是
fis release
、fis server
、fis install
。当用户输入fis xx
的时候,内部调用fis-command-release
、fis-command-server
、fis-command-install
这三个插件来完成任务。同时,FIS的命令行基于commander
这个插件构建,熟悉这个插件的同学很容易看懂FIS命令行相关部分源码。2、FIS以
fis-kernel
为核心。fis-kernel
提供了FIS的底层能力,包含了一系列模块,如配置、缓存、文件处理、日志等。FIS的三个命令,最终调用了这些模块来完成构建的任务。参考fis-kernel/lib/
目录,下面对每个模块的大致作用做了简单备注,后面的文章再详细展开。3、FIS的编译过程,最终可以拆解为细粒度的单文件编译,理解了下面这张图,对于阅读FIS的源码有非常大的帮助。(主要是
fis release
这个命令)一个简单的例子:fis server open
开篇的描述可能比较抽象,下面我们来个实际的例子。通过这个简单的例子,我们可以对FIS的整体设计有个大致的印象。
下文以
fis server open
为例,逐步剖析FIS的整体设计。其实FIS比较精华的部分集中在fis release
这个命令,不过fis server
这个命令相对简单,更有助于我们从纷繁的细节中跳出来,窥探FIS的整体概貌。假设我们已经安装了FIS。好,打开控制台,输入下面命令,其实就是打开FIS的server目录
从
package.json
可以知道,此时调用了fis/bin/fis
,里面只有一行有效代码,调用fis.cli.run()
方法,同时将进程参数传进去。接下来看下
../fis.js
。代码结构非常清晰。注意,笔者将一些代码给去掉,避免长串的代码影响理解。同时在关键处加了简单的注释我们来看下笔者注释过的
fis.cli.run
的源码。fis -h
或者fis --help
,打印帮助信息fis -v
或者fis --version
,打印版本信息fis-command-server
通过
fis.cli.run
的源码,我们可以看到,fis-command-xx
插件,都提供了register
方法,在这个方法内完成命令的初始化。之后,通过commander.parse(argv)
来执行命令。整个流程归纳如下:
fis server open
fis-command-server
fis-command-server源码
三个命令相关的插件中,
fis-command-server
的代码比较简单,这里就通过它来大致介绍下。根据惯例,同样是抽取一个超级精简版的
fis-command-server
,这不影响我们对源码的理解好了,
fis server open
就大致剖析到这里。只要熟悉commander
这个插件,相信不难看懂上面的代码,这里就不多做展开了,有空也写篇科普文讲下commander
的使用。写在后面
如序言所说,欢迎交流探讨。如有错漏,请指出。
The text was updated successfully, but these errors were encountered: