Node.js的模塊化機(jī)制和Buffer對(duì)象詳解
一、Node.js的模塊化機(jī)制
Node應(yīng)用是由模塊組成的,Node遵循了CommonJS的模塊規(guī)范,來(lái)隔離每個(gè)模塊的作用域,使每個(gè)模塊在它自身的命名空間中執(zhí)行。
1、什么是CommonJS模塊規(guī)范
CommonJS 是一套代碼規(guī)范, 目的是為了構(gòu)建 JavaScript 在瀏覽器之外的生態(tài)系統(tǒng) (服務(wù)器端, 桌面端).通過(guò)該規(guī)范使JavaScript具備開(kāi)發(fā)復(fù)雜應(yīng)用、跨平臺(tái)的能力
2、CommonJS模塊規(guī)范化的內(nèi)容
(1)導(dǎo)出模塊:moudle.exports 導(dǎo)出模塊
(2)導(dǎo)入模塊:require('模塊名稱')
//創(chuàng)建一個(gè)demo.js module.exports.name = 'yunxi' module.exports.age = 78 module.exports.getName = function(){ console.log("姓名:",this.name); } module.exports.getAge = function(){ console.log("年齡:",this.age); }
//創(chuàng)建text.js進(jìn)行測(cè)試 const person = require('./demo') person.getName() person.getAge() //輸出:姓名: yunxi // 年齡: 78
//創(chuàng)建text.js進(jìn)行測(cè)試 const person = require('./demo') person.getName() person.getAge() //輸出:姓名: yunxi // 年齡: 78
//創(chuàng)建text.js,進(jìn)行輸出測(cè)試 const Person = require('./demo') const p1 = new Person('小王',39) const p2 = new Person('小趙',29) p1.getName() p1.getAge() console.log('---------------'); p2.getName() p2.getAge() // 姓名: 小王 // 年齡: 39 // --------------- // 姓名: 小趙 // 年齡: 29
3、每個(gè)導(dǎo)出的模塊都有一個(gè)moudle對(duì)象,該對(duì)象包含的屬性有:
(1)moudle.exports:表示當(dāng)前模塊對(duì)外輸出的接口,其他模塊引用的是moudle.exports導(dǎo)出的變量
(2)exports變量:指向moudle.exports,為了操作的方便,它不能直接指向一個(gè)值
4、使用require導(dǎo)入模塊
導(dǎo)入并執(zhí)行一個(gè)JavaScript文件,返回的是一個(gè)exports對(duì)象,若沒(méi)有找到相應(yīng)的對(duì)象就報(bào)錯(cuò)
(1)模塊輸出是一個(gè)函數(shù),則該函數(shù)的輸出接口不能用exports變量來(lái)導(dǎo)出,必須用戶moudle.exports導(dǎo)出
(2)加載規(guī)則:
- A、用來(lái)加載js文件,默認(rèn)的文件擴(kuò)展名為.js
- B、根據(jù)參數(shù)的不同格式,去不同路徑下查找相應(yīng)的js文件
- './(../)':表示加載路徑是相對(duì)路徑
- '/':表示加載路徑是絕對(duì)路徑
既不是'./(../)'也不是'/':表示加載的模式是node的核心模塊,在node安裝路徑的node_modules中
(3)require的內(nèi)部處理的流程
require -->module.exports-->moudle._load
二、Buffer對(duì)象
是一個(gè)Node中的全局對(duì)象,可以直接使用,不需要使用require導(dǎo)入。該對(duì)象提供了在Node中處理二進(jìn)制數(shù)據(jù)的接口
1、用來(lái)彌補(bǔ)JavaScript在二進(jìn)制數(shù)據(jù)處理上不足。
2、Buffer是一個(gè)構(gòu)造函數(shù)
Buffer對(duì)象是V8引擎分配的一段內(nèi)存,類似數(shù)組,每個(gè)單元就是一個(gè)字節(jié),存放的0~255之間的數(shù)據(jù)
3、Buffer的基本操作:
(1)創(chuàng)建:let bytes = new Buffer(size)
(2)切片:bytes.slice(start,end)
(3)拷貝:bytes.copy(目標(biāo)緩沖區(qū),目標(biāo)緩沖區(qū)的起始位置,源緩沖區(qū)的起始位置,源緩沖區(qū)的結(jié)束位置)
(4)Buffer和字符串之間的互換:支持的編碼格式(ascii碼、utf8)
(5)Buffer和二進(jìn)制數(shù)組的區(qū)別:
A、二進(jìn)制數(shù)組:
Int8Array:-128~127
Uint8Array:0~255
Int16Array:-32768~32767
UInt16Array:0~65535
4、Buffer類:
Buffer類是基于Uint8Array的,因此其值為0~255的整數(shù)數(shù)組
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
socket.io與pm2(cluster)集群搭配的解決方案
這篇文章主要給大家介紹了關(guān)于socket.io與pm2(cluster)集群搭配的解決方案,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)看看吧。2017-06-06node.js中的fs.truncate方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.truncate方法使用說(shuō)明,本文介紹了fs.truncate的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12npm install安裝模塊-save和-save-dev命令的區(qū)別
這篇文章介紹了npm install安裝模塊-save和-save-dev命令的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06node.js中的fs.readFileSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.readFileSync方法使用說(shuō)明,本文介紹了fs.readFileSync的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12詳解基于Koa2開(kāi)發(fā)微信二維碼掃碼支付相關(guān)流程
這篇文章主要介紹了詳解基于Koa2開(kāi)發(fā)微信二維碼掃碼支付相關(guān)流程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05初識(shí)NodeJS服務(wù)端開(kāi)發(fā)入門(Express+MySQL)
本篇文章主要介紹了初識(shí)NodeJS服務(wù)端開(kāi)發(fā)入門(Express+MySQL),可以對(duì)數(shù)據(jù)庫(kù)中的一張表進(jìn)行簡(jiǎn)單的CRUD操作,有興趣的可以了解一下。2017-04-04node連接MySQL數(shù)據(jù)庫(kù)的3種方式總結(jié)
現(xiàn)在前端基本上都會(huì)用一些NodeJs,想必也想自己寫一些API或者個(gè)人博客的后臺(tái)系統(tǒng),這些就離不開(kāi)連接數(shù)據(jù)庫(kù)的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于node連接MySQL數(shù)據(jù)庫(kù)的3種方式,需要的朋友可以參考下2022-08-08node.js文件上傳重命名以及移動(dòng)位置的示例代碼
本篇文章主要介紹了node.js文件上傳重命名以及移動(dòng)位置的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01