最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從零學習node.js之模塊規(guī)范(一)

 更新時間:2017年02月21日 09:06:10   作者:wenzi  
Node.js是一個基于谷歌瀏覽器JavaScript執(zhí)行環(huán)境建立的一個平臺,讓JavaScript可以脫離客戶端瀏覽器運行,讓 JavaScript具有服務(wù)器語言的能力。從本文開始我們進行學習node.js,這篇文章主要介紹的是node.js中模塊規(guī)范的相關(guān)資料,需要的朋友可以參考下。

什么是Node.js?

很多初學者并沒有真正地理解Node.js到底是什么。nodejs.org網(wǎng)站中的描述也沒有多大幫助。

首先要清楚Node不是一個Web服務(wù)器,這十分重要。它本身并不能做任何事情。它無法像Apache那樣工作。如果你希望它成為一個HTTP服務(wù)器,你必須借助它內(nèi)置庫自己編寫。Node.js只是計算機上執(zhí)行代碼的另一種方式,它是一個簡單的JavaScript Runtime.

模塊化

在講解CommonJS, AMD, CMD這些概念之前,我們首先倆了解下js的模塊化。模塊化,顧名思義,就是將項目按照功能或者其他邏輯進行分解處理,每個部分只處理一個功能,進行功能的解耦處理,方便以后的開發(fā)和維護。那么模塊化必須具有以下的能力,才能進行模塊的拆分和組裝:

  1. 定義封裝的模塊;
  2. 定義新模塊對其他模塊的依賴;
  3. 可對其他模塊的引入支持;

那么就需要一套規(guī)范準則來定義這些能力,于是就出現(xiàn)了CommonJS, AMD, CMD等。

1. CommonJS

CommonJS原先叫做ServerJS,是js在服務(wù)端的規(guī)范,node使用的就是這種規(guī)范。根據(jù)CommonJS規(guī)范,一個單獨的文件就是一個模塊,require用來加載一個模塊,exports用來向外部暴露該模塊里的方法或?qū)傩浴?br />

例如:

// hello.js
function say(username){
 console.log( 'hello, '+username );
}

exports.say = say; 

=============

// main.js
var person = require('./hello');

person.say('wenzi'); // hello, wenzi
person.say('師少兵'); // hello, 師少兵
person.say('NUC'); // hello, NUC 

同時,require語句可以寫在文件中的任何位置,只要使用之前引用之前即可,不一定要寫在文件的最前面。不過,為了代碼更易閱讀,能直觀地看到當前引用了哪些模塊,最好是放在文件的最前面。

EXPORTS與MODULE.EXPORTS的區(qū)別

可能有人見過直接使用exports的,有的是使用module.exports的,這里稍微的講解下這兩者的區(qū)別。

先舉個簡單的例子:

var a = {name:'wenzi'};
var b = a;

console.log(a); // {name: "wenzi"}
console.log(b); // {name: "wenzi"} 

a和b輸出的結(jié)果是一樣的?,F(xiàn)在我改變下b中name的值:

b.name = 'shaobing';

console.log(a); // {name: "shaobing"}
console.log(b); // {name: "shaobing"} 

a和b的輸出結(jié)果都發(fā)生了改變。我再對b進行重新聲明:

var b = {name:'師少兵'};

console.log(a); // {name: "shaobing"}
console.log(b); // {name: "師少兵"} 

這三個例子輸出了三種結(jié)果:

  1. 聲明a對象,并把a賦值給b,然后a和b輸出了相同的結(jié)果;
  2. 改變了b中的name,那么a中的name也跟著改變;
  3. 重新聲明了b對象,那么a中的name則沒有跟著b一起改變

解釋:a 是一個對象,b 是對 a 的引用,即 a 和 b 指向同一塊內(nèi)存,所以1中的輸出是一樣的。當對 b 作修改時,即 a 和 b 指向同一塊內(nèi)存地址的內(nèi)容發(fā)生了改變,a 也會體現(xiàn)出來,所以第2個例子輸出也一樣。當 b 被覆蓋時,b 指向了一塊新的內(nèi)存,a 還是指向原來的內(nèi)存,所以最后輸出會不一樣。

那么此時就可以引出exportsmodule.exports了:

  1. module.exports 初始值為一個空對象 {}
  2. exports 是指向的 module.exports 的引用
  3. require() 返回的是 module.exports 而不是 exports

如果module.exports發(fā)生了新指向,則exports無效;若module.exports沒有發(fā)生變化,則直接exports即可。

2. AMD與RequireJS

說到AMD,不得不說到RequireJS,AMD從CommonJS社區(qū)獨立出來,單獨成為了AMD社區(qū),AMD的流行,很大程度上也是依托了RequireJS作者的推廣。

AMD規(guī)范中,默認推薦的模塊格式是:

// hello.js
// 將需要引入的模塊全部寫入到數(shù)組中,然后傳遞參數(shù)進行調(diào)用
define(['a', 'b'], function(a, ,b){
 // do something

 return{
 hello : function(username){
  console.log( 'hello, '+username );
 }
 }
})

==========

// main.js
define(['./hello'], function(h){
 h.hello('wenzi');
})

也就是說,在AMD中,模塊必須使用define定義,依賴通過函數(shù)參數(shù)傳進來,這樣的一個好處就是所有的依賴都能一目了然。

3. CMD與seajs

CMD規(guī)范是國內(nèi)著名的玉伯大神提出來的,將就的就是就近依賴,什么時候用到,就在那個地方進行require。SeaJS就是使用的CMD規(guī)范:

// hello.js
define(function(require, exports, module){
 var a = require('a');
 // do a

 var b = require( 'b' );
 // do b

 module.exports.hello = hello; // 對外輸出hello
})

從這里也能看到AMD和CMD的區(qū)別:

  1. AMD通常需要一次性引入全部的依賴,然后通過參數(shù)傳遞;而CMD則需要時才引入

不過,AMD也支持CMD這樣的引入格式,但內(nèi)部還是按照AMD的邏輯進行執(zhí)行。

4. 總結(jié)

這篇文章里介紹了下CommonJS, AMD, CMD規(guī)范的相關(guān)區(qū)別與聯(lián)系,這里再簡要的總結(jié)下:

  1. CommonJS: 每個文件就是一個模塊,不用define進行定義,node使用此規(guī)范;
  2. AMD: 使用define定義一個模塊,講究提前依賴;
  3. CMD: 使用define定義模塊,將就就近依賴

好了,以上就是這篇文章的全部內(nèi)容了,接下來,我們就要開始正式進行node的學習了。感興趣的朋友們請繼續(xù)關(guān)注腳本之家哦。

相關(guān)文章

  • node管理統(tǒng)計文件大小并顯示目錄磁盤空間狀態(tài)從零實現(xiàn)

    node管理統(tǒng)計文件大小并顯示目錄磁盤空間狀態(tài)從零實現(xiàn)

    這篇文章主要為大家介紹了node管理統(tǒng)計文件大小并顯示目錄磁盤空間狀態(tài)的從零實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Node.js返回JSONP詳解

    Node.js返回JSONP詳解

    下面小編就為大家?guī)硪黄狽ode.js返回JSONP詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • nodejs中安裝ghost出錯的原因及解決方法

    nodejs中安裝ghost出錯的原因及解決方法

    本篇文章主要介紹了nodejs中安裝ghost出錯的原因及解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Node.js實現(xiàn)簡單聊天服務(wù)器

    Node.js實現(xiàn)簡單聊天服務(wù)器

    Node.js 是一個基于Chrome JavaScript運行時建立的一個平臺, 用來方便地搭建快速的,易于擴展的網(wǎng)絡(luò)應用,今天我們來探討下,如何使用node.js實現(xiàn)簡單的聊天服務(wù)器
    2014-06-06
  • Node.js中module.exports?和exports使用誤區(qū)

    Node.js中module.exports?和exports使用誤區(qū)

    本文主要介紹了Node.js中module.exports?和exports使用誤區(qū),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Node server生成Swagger接口文檔步驟詳解

    Node server生成Swagger接口文檔步驟詳解

    本文介紹使用NodeJs搭建的后端server快速生成Swagger接口文檔的技巧,本文有詳細的步驟講解,通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-01-01
  • node連接kafka2.0實現(xiàn)方法示例

    node連接kafka2.0實現(xiàn)方法示例

    這篇文章主要介紹了node連接kafka2.0,nodejs連接kafka2.0的實現(xiàn)方法,結(jié)合實例形式分析了kafka2.0的功能、原理、以及node.js連接kafka2.0的具體實現(xiàn)技巧,需要的朋友可以參考下
    2023-05-05
  • 解決node-webkit 不支持html5播放mp4視頻的方法

    解決node-webkit 不支持html5播放mp4視頻的方法

    本文給大家分享的是解決node-webkit 不支持html5播放mp4視頻的方法,其原因大概是因為node-webkit沒有購買mp4格式的專利授權(quán),恩,我們來想個辦法來解決這個事情吧。
    2015-03-03
  • node.js中的fs.existsSync方法使用說明

    node.js中的fs.existsSync方法使用說明

    這篇文章主要介紹了node.js中的fs.existsSync方法使用說明,本文介紹了fs.existsSync方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Nodejs 識別圖片類型的方法

    Nodejs 識別圖片類型的方法

    這篇文章主要介紹了Nodejs 識別圖片類型的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08

最新評論

河源市| 新津县| 龙井市| 阿城市| 池州市| 永定县| 长白| 吉安市| 隆安县| 龙岩市| 吴忠市| 岢岚县| 临江市| 孟村| 蓝山县| 旬阳县| 富裕县| 化隆| 温宿县| 江口县| 崇阳县| 双桥区| 嫩江县| 清水河县| 家居| 民勤县| 分宜县| 印江| 姜堰市| 休宁县| 富蕴县| 民丰县| 仲巴县| 麻栗坡县| 隆子县| 甘孜县| 益阳市| 淮滨县| 横山县| 柯坪县| 炎陵县|