Meteor應用的啓動過程分析

使用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

其實這個腳本執行了一次以後,就不須要再執行這個腳本了, 徹底能夠把~/.meteor/加入到$PATH中或者建立連接來直接執行~/.meteor/meteor函數

執行ls ~/.meteor/meteor -al這個命令就能夠看到其實這只是個連接, 實際的文件是~/.meteor/packages/meteor-tool/1.0.26/meteor-tool-os.linux.x86_32/meteorurl

這也是個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

main.js中Fiber(function(){...}).run()相似於C語言中的main()函數,是全部函數的入口。 這個函數首先檢查Node的版本和ROOT_URL,而後解析並校驗傳入的命令和參數,最後執行命令。 全部命令的實如今tools/command.js中,默認的命令是run。源碼

相關文章
相關標籤/搜索