使用Meteor建立和运行一个应用是很是简单的,而简单的背后就是繁杂的细节。 咱们但愿经过分析源码,抽丝剥茧,来理解这简单背后的细节之美。node
meteor v0.9.0.1linux
首先咱们得建立一个应用meteor create test
,后面的代码分析都会用到这个应用。 在Meteor中只要在应用目录中执行meteor命令就能够运行这个应用了,应用正常运行以后会有以下打印:web
[[[[[ ~/WCode/test ]]]]] => Started proxy. => Started your app. => App running at: http://localhost:3000/
从上面的打印看Meteor先启动proxy、而后再启动app,可是在启动proxy以前应该还作了一些事的, 好比校验传入参数、获取环境变量、加载Package和Module等等。 根据上述推测,咱们暂时把应用的启动过程分为四个步骤:环境配置、加载、启动proxy和启动app。app
当咱们执行curl https://install.meteor.com/ | sh
完成meteor安装以后, 系统中会出现一个/usr/local/bin/meteor
可执行文件和一个~/.meteor/
目录。 ~/.meteor/
目录中包含了Meteor运行须要的全部脚本、包和模块。 /usr/local/bin/meteor
这个Shell脚本作了两件事:curl
~/.meteor/meteor
。其实这个脚本执行了一次以后,就不须要再执行这个脚本了, 彻底能够把~/.meteor/
加入到$PATH中或者建立连接来直接执行~/.meteor/meteor
。函数
执行ls ~/.meteor/meteor -al
这个命令就能够看到其实这只是个连接, 实际的文件是~/.meteor/packages/meteor-tool/1.0.26/meteor-tool-os.linux.x86_32/meteor
。url
这也是个Shell脚本,也作了两件事:检查Meteor版本和运行exec "$DEV_BUNDLE/bin/node" "$METEOR" "$@"
其中DEV_BUNDLE="$SCRIPT_DIR/dev_bundle"
,METEOR="$SCRIPT_DIR/tools/main.js"
, $@
是输入的命令和参数 而SRCIPT_DIR=~/.meteor/packages/meteor-tool/.1.0.26.13pjtg1++os.linux.x86_32+web.browser+web.cordova/meteor-tool-os.linux.x86_32/
code
所以,meteor运行的真正入口是main.js
,这个文件在源码中位于tools目录下。cordova
main.js中Fiber(function(){...}).run()
相似于C语言中的main()函数,是全部函数的入口。 这个函数首先检查Node的版本和ROOT_URL,而后解析并校验传入的命令和参数,最后执行命令。 全部命令的实如今tools/command.js中,默认的命令是run。源码