node.js中的模塊化標(biāo)準(zhǔn)CommonJS與自定義模塊
一、 什么是 CommonJs?
JavaScript 是一個(gè)強(qiáng)大面向?qū)ο笳Z(yǔ)言,它有很多快速高效的解釋器。 然而, JavaScript標(biāo)準(zhǔn)定義的 API 是為了構(gòu)建基于瀏覽器的應(yīng)用程序。并沒(méi)有制定一個(gè)用于更廣泛的應(yīng)用程序的標(biāo)準(zhǔn)庫(kù)。 CommonJS 規(guī)范的提出,主要是為了彌補(bǔ)當(dāng)前 JavaScript 沒(méi)有標(biāo)準(zhǔn)的缺陷。 它的終極目標(biāo)就是: 提供一個(gè)類(lèi)似 Python, Ruby 和 Java 語(yǔ)言的標(biāo)準(zhǔn)庫(kù),而不只是停留在小腳本程序的階段。用 CommonJS API 編寫(xiě)出的應(yīng)用, 不僅可以利用 JavaScript 開(kāi)發(fā)客戶端應(yīng)用, 而且還可以編寫(xiě)以下應(yīng)用。
- 服務(wù)器端 JavaScript 應(yīng)用程序。( nodejs)
- 命令行工具。
- 桌面圖形界面應(yīng)用程序。
CommonJS 就是模塊化的標(biāo)準(zhǔn), nodejs 就是 CommonJS( 模塊化) 的實(shí)現(xiàn)。
二、 Nodejs 中的模塊化
Node 應(yīng)用由模塊組成,采用 CommonJS 模塊規(guī)范。
2.1 在 Node 中,模塊分為兩類(lèi):
一類(lèi)是 Node 提供的模塊,稱為核心模塊;另一類(lèi)是用戶編寫(xiě)的模塊,稱為文件模塊。
- 核心模塊部分在 Node 源代碼的編譯過(guò)程中,編譯進(jìn)了二進(jìn)制執(zhí)行文件。在 Node 進(jìn)程啟動(dòng)時(shí),部分核心模塊就被直接加載進(jìn)內(nèi)存中,所以這部分核心模塊引入時(shí),文件定位和編譯執(zhí)行這兩個(gè)步驟可以省略掉,并且在路徑分析中優(yōu)先判斷,所以它的加載速度是最快的。如: HTTP 模塊 、 URL 模塊、 Fs 模塊都是 nodejs 內(nèi)置的核心模塊,可以直接引入使用。
- 文件模塊則是在運(yùn)行時(shí)動(dòng)態(tài)加載,需要完整的路徑分析、文件定位、編譯執(zhí)行過(guò)程、速度相比核心模塊稍微慢一些,但是用的非常多。 這些模塊需要我們自己定義。 接下來(lái)我們看一下 nodejs 中的自定義模塊。
2.2 CommonJS( Nodejs) 中自定義模塊的規(guī)定:
- 1.我們可以把公共的功能抽離成為一個(gè)單獨(dú)的 js 文件作為一個(gè)模塊, 默認(rèn)情況下面這個(gè)模塊里面的方法或者屬性, 外面是沒(méi)法訪問(wèn)的。如果要讓外部可以訪問(wèn)模塊里面的方法或者屬性, 就必須在模塊里面通過(guò) exports 或者 module.exports 暴露屬性或者方法。
- 2. 在需要使用這些模塊的文件中, 通過(guò) require 的方式引入這個(gè)模塊。這個(gè)時(shí)候就可以使用模塊里面暴露的屬性和方法。

2.3 定義使用模塊:
// 定義一個(gè) tools.js 的模塊
//模塊定義
var tools = {
sayHello: function() {
return 'hello NodeJS';
},
add: function(x, y) {
return x + y;
}
};
// 模塊接口的暴露
// module.exports = tools;
exports.sayHello = tools.sayHello;
exports.add = tools.add;
1
2
3
4
var http = require('http');
// 引入自定義的 tools.js 模塊
var tools= require('./tools');
tools.sayHello(); //使用模塊三、 npm init 生成 package.json
npm init --yes
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
node.js實(shí)現(xiàn)逐行讀取文件內(nèi)容的代碼
這篇文章主要介紹了node.js實(shí)現(xiàn)逐行讀取文件內(nèi)容的代碼,本文還介紹了一個(gè)node.js的按行讀取內(nèi)容開(kāi)源項(xiàng)目,需要的朋友可以參考下2014-06-06
Node.js靜態(tài)文件服務(wù)器改進(jìn)版
這篇文章主要介紹了Node.js靜態(tài)文件服務(wù)器改進(jìn)版的相關(guān)資料,需要的朋友可以參考下2016-01-01
nodejs利用ajax實(shí)現(xiàn)網(wǎng)頁(yè)無(wú)刷新上傳圖片實(shí)例代碼
本篇文章主要介紹了nodejs利用ajax實(shí)現(xiàn)網(wǎng)頁(yè)無(wú)刷新上傳圖片實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Nodejs進(jìn)階:如何將圖片轉(zhuǎn)成datauri嵌入到網(wǎng)頁(yè)中去實(shí)例
這篇文章主要介紹了Nodejs進(jìn)階:如何將圖片轉(zhuǎn)成datauri嵌入到網(wǎng)頁(yè)中去,有興趣的可以了解一下。2016-11-11
Node.js包管理器代理工具Verdaccio輕松創(chuàng)建管理本地npm包倉(cāng)庫(kù)
這篇文章主要為大家介紹了Node.js包管理器代理工具Verdaccio輕松創(chuàng)建管理本地npm包倉(cāng)庫(kù)的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
前端自動(dòng)化開(kāi)發(fā)之Node.js的環(huán)境搭建教程
這篇文章主要介紹了前端自動(dòng)化開(kāi)發(fā)之Node.js環(huán)境搭建的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node.js具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04
nodejs個(gè)人博客開(kāi)發(fā)第七步?后臺(tái)登陸
這篇文章主要為大家詳細(xì)介紹了nodejs個(gè)人博客開(kāi)發(fā)的后臺(tái)登陸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04

