FIS 源码解析-整体架构
In 未分类 on 2015年05月08日 by view: 1,368
0

序言

这里假设本文读者对 FIS 已经比较熟悉,如还不了解,可猛击官方文档

虽然 FIS 整体的源码结构比较清晰,不过讲解起来也是个系统庞大的工程,笔者尽量的挑重点的讲。如果读者有感兴趣的部分笔者没有提到的,或者是存在疑惑的,可以在评论里跑出来,笔者会试着去覆盖这些点。

下笔匆忙,如有错漏请指出。

Getting started

如在开始剖析 FIS 的源码前,有三点内容首先强调下,这也是解构 FIS 内部设计的基础。

1、 FIS 支持三个命令,分别是 fis releasefis serverfis install。当用户输入 fis xx 的时候,内部调用 fis-command-releasefis-command-serverfis-command-install 这三个插件来完成任务。同时,FIS 的命令行基于 commander 这个插件构建,熟悉这个插件的同学很容易看懂 FIS 命令行相关部分源码。

2、FIS 以 fis-kernel 为核心。fis-kernel 提供了 FIS 的底层能力,包含了一系列模块,如配置、缓存、文件处理、日志等。FIS 的三个命令,最终调用了这些模块来完成构建的任务。参考 fis-kernel/lib/ 目录,下面对每个模块的大致作用做了简单备注,后面的文章再详细展开。

3、FIS 的编译过程,最终可以拆解为细粒度的单文件编译,理解了下面这张图,对于阅读 FIS 的源码有非常大的帮助。(主要是 fis release 这个命令)

enter image description here

一个简单的例子: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。代码结构非常清晰。注意,笔者将一些代码给去掉,避免长串的代码影响理解。同时在关键处加了简单的注释