摘要:在后臺(tái)開(kāi)發(fā)語(yǔ)言中,比如Java、C#。他們都是隱含模塊化的,Node.js默認(rèn)幫我們提供了模塊化這種機(jī)制。 在服務(wù)器端,我們想要使用底層的一些功能需要導(dǎo)入一些“包”來(lái)對(duì)其操作,比如操作文件、網(wǎng)絡(luò)需要導(dǎo)入對(duì)應(yīng)的包。其它語(yǔ)言中都是基于類來(lái)實(shí)現(xiàn)的模塊化的思想,使用類來(lái)組織文件和文件之間的關(guān)聯(lián)。 而Node.js中使用的是JavaScript語(yǔ)言,ECMAScript僅僅規(guī)定了
在后臺(tái)開(kāi)發(fā)語(yǔ)言中,比如Java、C#。他們都是隱含模塊化的,Node.js默認(rèn)幫我們提供了模塊化這種機(jī)制。
在服務(wù)器端,我們想要使用底層的一些功能需要導(dǎo)入一些“包”來(lái)對(duì)其操作,比如操作文件、網(wǎng)絡(luò)需要導(dǎo)入對(duì)應(yīng)的包。其它語(yǔ)言中都是基于類來(lái)實(shí)現(xiàn)的模塊化的思想,使用類來(lái)組織文件和文件之間的關(guān)聯(lián)。
而Node.js中使用的是JavaScript語(yǔ)言,ECMAScript僅僅規(guī)定了基本的語(yǔ)法的書(shū)寫(xiě),并沒(méi)有規(guī)定文件之間
關(guān)聯(lián),也就是說(shuō)每個(gè)js文件之間是獨(dú)立的,Node.js已經(jīng)幫我們實(shí)現(xiàn)了js文件之間的關(guān)聯(lián)(模塊化)
Node.js中的模塊化是基于CommonJS規(guī)范的
JavaScript的局限性
沒(méi)有模塊系統(tǒng)
系統(tǒng)提供的接口較少,比如:缺少操作文件、I/O流等常用的接口
沒(méi)有標(biāo)準(zhǔn)接口,缺少如web服務(wù)器、數(shù)據(jù)庫(kù)等統(tǒng)一接口
缺乏管理系統(tǒng)導(dǎo)師JavaScript應(yīng)用中基本沒(méi)
CommonJS規(guī)范
Node.js開(kāi)發(fā)之初遵守了CommonJS規(guī)范
使JavaScript達(dá)到像Java、Python、PHP等語(yǔ)言一樣有開(kāi)發(fā)大型應(yīng)用的基本能力
CommonJS規(guī)范規(guī)定每一個(gè)模塊都有一個(gè)單獨(dú)的作用域
CommonJS規(guī)范規(guī)定每個(gè)模塊對(duì)外公布的成員使用module.exports或者exports
有了模塊化系統(tǒng)之后,Node.js提供了許多系統(tǒng)模塊:文件、Buffer、I/O流、Socket等
那么接下來(lái)看一下核心模塊
今天接觸到的核心模塊:
path模塊
導(dǎo)入模塊 var path = require("path");
basename() 獲取文件名+后綴
path.basename("/foo/hello/world/123.html") //第二個(gè)參數(shù),去掉獲取的文件名中的相同部分 path.basename("c:/foo/hello/world/123.html",".html")
dirname() 獲取目錄
path.dirname("/foo/hello/world/123.html")
extname() 獲取文件的擴(kuò)展名(尾綴名)
path.extname("/foo/hello/world/123.html")
join() 合并路徑
var p1 = "c://abc/xyz"; var p2 = "/123/456"; console.log(path.join(p1,p2));
parse() 把路徑轉(zhuǎn)換為一個(gè)對(duì)象
path.parse("c:\\home\\hello\\world\\123.html") { root: 'c:/', dir: 'c://home/hello/world', base: '123.html', ext: '.html', name: '123' }
format() 把一個(gè)路徑對(duì)象轉(zhuǎn)換成一個(gè)路徑字符串
var obj = { root: 'c:\\', dir: 'c:\\home\\hello\\world', base: '123.html', ext: '.html', name: '123' } console.log(path.format(obj));
delimiter 環(huán)境變量的分隔符,可以跨平臺(tái) windows下是; 其它平臺(tái) :
path.sep 路徑的分隔符 windows下是\ 其它下是/
isAbsolute() 是否是絕對(duì)路徑
URL模塊
導(dǎo)入模塊 var querystring = require("querystring");
parse() 把參數(shù)字符串解析成對(duì)象
var obj = querystring.parse("version=1.0&time=123"); console.log(obj);
format() 把路徑對(duì)象轉(zhuǎn)換成字符串
var obj = { protocol: 'http:', slashes: true, auth: null, host: 'www.baidu.com:8080', port: '8080', hostname: 'www.baidu.com', hash: '#abcd', search: '?version=1.0&time=1123', query: 'version=1.0&time=1123', pathname: '/images/1.jpg', path: '/images/1.jpg?version=1.0&time=1123', href: 'http://www.baidu.com:8080/images/1.jpg?version=1.0&time=1123#abcd' }; var str = url.format(obj); console.log(str);
querystring模塊
導(dǎo)入模塊 var querystring = require("querystring");
parse() 把參數(shù)字符串解析成對(duì)象
var obj = querystring.parse("version=1.0&time=123"); console.log(obj);
stringify() 把一個(gè)對(duì)象轉(zhuǎn)換成一個(gè)字符串
escape() url進(jìn)行編碼
unescape() url進(jìn)行解碼
那么核心模塊存在哪里呢,
核心模塊存儲(chǔ)在node.exe中,當(dāng)node.exe運(yùn)行的時(shí)候,核心模塊會(huì)被加載,require的時(shí)候會(huì)加載到內(nèi)存
在github上可以找到源代碼,lib文件夾下
核心模塊的執(zhí)行速度比較快