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