javascript
CommonJS规范(转)
?
概述
CommonJS是服務器端模塊的規范,Node.js采用了這個規范。
根據CommonJS規范,一個單獨的文件就是一個模塊。加載模塊使用require方法,該方法讀取一個文件并執行,最后返回文件內部的exports對象。下面就是一個簡單的模塊文件example.js。
console.log("evaluating example.js"); var invisible = function () {console.log("invisible"); } exports.message = "hi"; exports.say = function () {console.log(message); }使用require方法,加載example.js。
var example = require('./example.js');這時,變量example就對應模塊中的exports對象,于是就可以通過這個變量,使用模塊提供的各個方法。
{message: "hi",say: [Function] }require方法默認讀取js文件,所以可以省略js后綴名。
var example = require('./example');js文件名前面需要加上路徑,可以是相對路徑(相對于使用require方法的文件),也可以是絕對路徑。如果省略路徑,node.js會認為,你 要加載一個核心模塊,或者已經安裝在本地 node_modules 目錄中的模塊。如果加載的是一個目錄,node.js會首先尋找該目錄中的 package.json 文件,加載該文件 main 屬性提到的模塊,否則就尋找該目錄下的 index.js 文件。看一個復雜一點的例子。
// foobar.js function foobar(){this.foo = function(){console.log('Hello foo');}this.bar = function(){console.log('Hello bar');} } exports.foobar = foobar;調用該模塊的方法如下:
var foobar = require('./foobar').foobar, test = new foobar(); test.bar(); // 'Hello bar'有時,不需要exports返回一個對象,只需要它返回一個函數。這時,就要寫成module.exports。
module.exports = function () {console.log("hello world") }AMD規范與CommonJS規范的兼容性
CommonJS規范加載模塊是同步的,也就是說,只有加載完成,才能執行后面的操作。AMD規范則是非同步加載模塊,允許指定回調函數。由于 Node.js主要用于服務器編程,模塊文件一般都已經存在于本地硬盤,所以加載起來比較快,不用考慮非同步加載的方式,所以CommonJS規范比較適 用。但是,如果是瀏覽器環境,要從服務器端加載模塊,這時就必須采用非同步模式,因此瀏覽器端一般采用AMD規范。
AMD規范使用define方法定義模塊,下面就是一個例子:
define(['package/lib'], function(lib){ function foo(){lib.log('hello world!');} return {foo: foo}; });AMD規范允許輸出的模塊兼容CommonJS規范,這時define方法需要寫成下面這樣:
define(function (require, exports, module){var someModule = require("someModule");var anotherModule = require("anotherModule"); someModule.doTehAwesome();anotherModule.doMoarAwesome();exports.asplode = function (){someModule.doTehAwesome();anotherModule.doMoarAwesome();}; });參考鏈接
Addy Osmani, Writing Modular JavaScript With AMD, CommonJS & ES Harmony
轉載自:http://javascript.ruanyifeng.com/nodejs/commonjs.html#toc0
?
總結
以上是生活随笔為你收集整理的CommonJS规范(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Wcf 双工通信的应用
- 下一篇: Web APP开发技巧总结(转)