天天看點

《Node應用程式建構——使用MongoDB和Backbone》一2.5 子產品與CommonJS

本節書摘來自異步社群《node應用程式建構——使用mongodb和backbone》一書中的第2章,第2.5節,作者【美】mike wilson,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

node應用程式建構——使用mongodb和backbone

node引發了伺服器端javascript程式設計的巨大興趣,更别提對一般javascript的影響了。但這不是javascript第一次脫離浏覽器作為工具,實際上,javascript在網景公司的浏覽器中首次亮相之後不久,該公司釋出的一個web伺服器就包含了該語言。不到一年後,微軟的網際網路資訊服務(iis)伺服器軟體也開始支援伺服器端javascript(他們的方言稱為jscript)。大約在同一時間,網景打算使用java程式設計語言重寫他們的旗艦web浏覽器,該項目最終産生了mozilla的rhino javascript引擎。

如果這聽起來像是一個快速碎片化的市場,請想象一下試圖為一個現有伺服器産品編寫javascript代碼,然後在其他地方重用同樣的代碼。如果你的應用足夠小,你或許可以通過一些修改對付過去。任何正常大小的應用程式很快會發現,這時需要調用外部庫和子產品化元件,否則最後将得到一個亂成一團、無法維護的幾千行腳本代碼的大檔案。每個伺服器都有不同的方法來劃分應用代碼,但沒有統一标準。一旦選用了一種,你就被套牢了。

情況并沒有好多少,雖然今天在代碼開發标準化、命名空間保護、對象建立和子產品化方面已經取得了重大進步。commonjs旨在為脫離浏覽器的javascript提供一套标準規範,其中許多已經被node采用。如果你剛開始使用node,而你的應用程式已經大到不合适放在一個檔案中,那麼你必須知道,你的應用無法使用外部檔案中聲明的變量,除非顯式地使用exports關鍵字使它們可見。

例2-9展示了一個簡單的node.js子產品,它暴露出一個函數:getflagwidth,用于計算美國國旗的法定寬度,寬度必須1.9倍于國旗的高度;這個比例存儲在名為flag_width的變量中。函數getflagwidth擷取高度值并乘以寬高比例,為給定的國旗高度産生對應的寬度。

例2-9 計算國旗寬度的子產品

《Node應用程式建構——使用MongoDB和Backbone》一2.5 子產品與CommonJS

如果你在應用中包含這個檔案,你将能夠通路getflagwidth函數,它使用exports關鍵字暴露接口,而不是flag_width變量。flag_width可以認為是一個“私有”變量,隻能在該子產品的上下文中通路,而不能在整個應用範圍内通路。