2012-09-29

近看 LimeJS 專案管理(create & update)

新建 LimeJS 專案的指令:
python bin/lime.py create HelloLimeJS
除了建立一個 HelloLimeJS 目錄與兩個檔案 HelloLimeJS.html 與 HelloLimeJS.js,還發生了兩件事情:
  • 將專案註冊到 LimeJS 裡。
  • 將專案資訊寫到 closure\closure\goog\deps.js。

為什麼要有 deps.js?

前面說過 Google Closure Library 提供了 Namespace 的概念到 Javascript 裡,所以可以呼叫 goog.provide(...) 定義 Namespace 或者 goog.require(...) 引用其他的 library。

但是 HelloLimeJS.html 裡只引用了兩個 Javascript,除了專案專屬的 js 外,就只有 closure/closure/goog/base.js,那怎麼知道 Google Closure Library 在哪?LimeJS library 在哪?這就是 deps.js 存在的目的。

首先 base.js 定義了 goog.provide(...) 與 goog.require(...),然後 deps.js 定義了 Google Closure Library 和 LimeJS library 的位置,所以 base.js 就可以去 deps.js 找需要的 library,甚至 deps.js 還定義了自家專案的位置,所以當多專案開發時,自家專案也可以相互引用(goog.require)的。


那 deps.js 怎麼來的?

lime.py 產生的,當執行上面的新建 LimeJS 專案的指令時,就會產生 deps.js,紀錄了 Google Closure Library、LimeJS library 與新專案的位置資訊。
// This file was autogenerated by D:\_Work\digitalfruit-limejs-00d38a9\closure\closure\bin\build\depswriter.py.
// Please do not edit.
goog.addDependency('../../../HelloLimeJS/HelloLimeJS.js', ['HelloLimeJS'], ['lime.Circle', 'lime.Director', 'lime.Label', 'lime.Layer', 'lime.Scene', 'lime.animation.FadeTo', 'lime.animation.MoveTo', 'lime.animation.ScaleTo', 'lime.animation.Spawn']);
goog.addDependency(...);
...
goog.addDependency(...) 需要三個參數,分別是檔案位置、Namespace 與需要的 library namespace。


LimeJS 的專案註冊

新建專案後,若需要修改 namespace,在修改 HelloLimeJS.js 裡的 goog.provide(...) 的內容後,得執行:
python bin/lime.py update
就會將新的 namespace 更新到 deps.js,事實上是重新產生並覆寫舊的 deps.js。

那有趣的事來了,lime.py 怎麼知道有哪些專案存在?這就是最前面提到的第一件事,新建專案時會註冊到 LimeJS。

開啟 bin/projects 就可以看到所有透過 lime.py 建立的專案列表。

當專案被移走或刪除,並執行 update 後,專案名稱就會從 bin/projects 裡刪去,也就是說可以手動在 bin/proects 加入原專案或新專案。


小結

deps.js 是所有可用的 library 清單,projects 是 LimeJS 專案清單。

lime.py create 建立專案後將資訊寫到 deps.js 與 projects,namespace 有異動時執行 lime.py update,可以將異動資訊寫到 deps.js。

不管是 deps.js 或是 projects,都不一定要有自家專案的資訊,只有在多專案相互引用時才需要,但 deps.js 一定要有 Google Closure Library 與 LimeJS library 的資訊。

---
---
---

沒有留言:

張貼留言