appium server的源码文件为bin和lib两个文件夹,但是bin目录为可执行文件,直接进入lib目录下就行,通过package.json里main字段我们了解程序的入口文件为lib/server/main.js,ok我们从这个文件开始。
main.js
我们一步一步来分析这个文件。我采用的是eclipse的debug方式来debug我们的程序。
首先我们以debug-brk的方式启动程序:
E:\appium>node --debug-brk=9222 .
Debugger listening on port 9222
ok,这个时候程序会以debug模式启动,监听9222的端口,且会停留在源文件的第一行等待调试。ok,这个时候我们在eclipse中启动V8调试
点击Debug后,进入调试模式:
程序停留在main.js文件的第一行,这个时候我们会发现这个main.js比我们直接打开main.js多了一行代码:
(function (exports, require, module, __filename, __dirname)
这个是nodejs内部的加载机制,它会每一个本地文件包裹上这么一个函数,只要知道这些就行,其他的和正常打开该文件的代码都是一样的。我们现在进入正题。
严格模式
在nodejs中有一套规范叫严格模式,它是前人总结的一套nodejs程序编写规范,旨在提高node.js代码的可读性以及降低维护成本等。通常在文件的开头用下面语句标识:
"use strict";
初始化
var parser = require('./parser.js')()
, logFactory = require('./logger.js')
, logger = null
, args = null
, fs = require('fs')
, path = require('path')
, noPermsCheck = false;
require('colors');
上面的语句为初始化模块、变量的语句,以./开头的是本地模块,还有一种是核心模块,就是不以/标识的模块,比如上面的fs、path、colors模块。各个变量的意义:
变量名 | 意义 |
parser | 加载自本地模块,是一个参数解析器,我们会在parser.js中详细介绍 |
logFactory | log工厂类 |
logger | log器 |
args | 参数集合 |
fs | 文件模块,核心模块 |
path | 路径模块,核心模块 |
noPermsCheck | boolean值,是否省略权限检查,默认为false,需要检查权限 |