Cloud Foundry 是開放源碼的 PaaS 解決方案,支援多種程式語言、開發框架及資料庫等服務,而且更容易開發、測試及佈署。本系列文章將從零開始,和學習者一起開啟雲端應用程式開發的大門。
關於 Cloud Foundry 使用 package.json 管理套件的方法。
利用 Express 產生的新專案,包含一個名為 package.json 的設定檔。Node.js 相關的工具會讀取這個設定檔;例如 NPM 套件管理工具,會依照 dependencies 的設定內容,自動下載安裝需要的套件(範例中的套件為 express 及 jade)。
::
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app"
},
"dependencies": {
"express": "3.0.0rc5",
"jade": "*"
}
}
* Packages/1.0 - CommonJS Spec Wiki(http://wiki.commonjs.org/wiki/Packages/1.0)
* Specifics of npm's package.json handling(https://npmjs.org/doc/json.html)
因此,專案建立 package.json 設定後,就不需要將 node_modules 資料夾(由 NPM 產生)放到版本控制系統。因為其他開發者只要取得 package.json,再執行一次 npm install 指令,就會重新將相關套件安裝好。
以 GIT 版本控制工具來說,通常會在 .gitignore 檔案中加入一行(node_modules),表示日後將新檔案加到版本控制時,會自動忽略這個資料夾。
但如果你嘗試將 node_modules 刪除後,再把應用程式發佈到 Cloud Foundry,將會發生應用程式無法啟動的錯誤。使用 VMC 的 update 指令,將已經發佈過的應用程式更新。
::
rm -rf node_modules
vmc update myfirstnode
Cloud Foundry 提供一份關於 Node.js NPM 的說明,可以得知使用上有所限制。
* Cloud Foundry Supports Node.js Modules with NPM(http://blog.cloudfoundry.com/2012/05/24/cloud-foundry-supports-node-js-modules-with-npm/)
其中重點是需要用 npm shrinkwrap 將套件相依的版本鎖住(lock down),使用 shrinkwrap 前需要先用 NPM 把相關套件都裝起來。
::
npm install
npm shrinkwrap
執行後會產生 npm-shrinkwrap.json 這個檔案,接下來就可以重新發佈程式(先將 Cloud Foundry 上的應用程式刪除)。
::
vmc delete myfirstnode
rm -rf node_modules
vmc push myfirstnode --runtime=node06
這次就可以發佈成功了,仔細觀察 VMC 的訊息,可以看到上傳的檔案體積差異,包含 node_modules 檔案的容量,一個新建的 Express 專案,大約會有 20K,如果把 node_modules 去除,就大概只需要 3K。
::
Uploading (3K): OK
透過組態檔管理套件版本是一個好的做法,即使用 Java 或 PHP 等其他語言工具,也可以找到類似工具,讓專案只管理自己開發、真正重要的部份。