Node.js的模塊化機制和Buffer對象詳解

一、Node.js的模塊化機制

Node應用是由模塊組成的,Node遵循瞭CommonJS的模塊規范,來隔離每個模塊的作用域,使每個模塊在它自身的命名空間中執行。

1、什麼是CommonJS模塊規范

CommonJS 是一套代碼規范, 目的是為瞭構建 JavaScript 在瀏覽器之外的生態系統 (服務器端, 桌面端).通過該規范使JavaScript具備開發復雜應用、跨平臺的能力

2、CommonJS模塊規范化的內容

(1)導出模塊:moudle.exports 導出模塊

(2)導入模塊:require('模塊名稱')

//創建一個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);
}
//創建text.js進行測試
const person = require('./demo')
person.getName()
person.getAge()
//輸出:姓名: yunxi
//     年齡: 78
//創建text.js進行測試
const person = require('./demo')
person.getName()
person.getAge()
//輸出:姓名: yunxi
//     年齡: 78
//創建text.js,進行輸出測試
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、每個導出的模塊都有一個moudle對象,該對象包含的屬性有:

(1)moudle.exports:表示當前模塊對外輸出的接口,其他模塊引用的是moudle.exports導出的變量

(2)exports變量:指向moudle.exports,為瞭操作的方便,它不能直接指向一個值

4、使用require導入模塊

導入並執行一個JavaScript文件,返回的是一個exports對象,若沒有找到相應的對象就報錯

(1)模塊輸出是一個函數,則該函數的輸出接口不能用exports變量來導出,必須用戶moudle.exports導出

(2)加載規則:

  • A、用來加載js文件,默認的文件擴展名為.js
  • B、根據參數的不同格式,去不同路徑下查找相應的js文件
    • './(../)':表示加載路徑是相對路徑
    • '/':表示加載路徑是絕對路徑

既不是'./(../)'也不是'/':表示加載的模式是node的核心模塊,在node安裝路徑的node_modules中

(3)require的內部處理的流程

require –>module.exports–>moudle._load

二、Buffer對象

是一個Node中的全局對象,可以直接使用,不需要使用require導入。該對象提供瞭在Node中處理二進制數據的接口

1、用來彌補JavaScript在二進制數據處理上不足。

2、Buffer是一個構造函數

Buffer對象是V8引擎分配的一段內存,類似數組,每個單元就是一個字節,存放的0~255之間的數據

3、Buffer的基本操作:

(1)創建:let bytes = new Buffer(size)

(2)切片:bytes.slice(start,end)

(3)拷貝:bytes.copy(目標緩沖區,目標緩沖區的起始位置,源緩沖區的起始位置,源緩沖區的結束位置)

(4)Buffer和字符串之間的互換:支持的編碼格式(ascii碼、utf8)

(5)Buffer和二進制數組的區別:

A、二進制數組:

Int8Array:-128~127

Uint8Array:0~255

Int16Array:-32768~32767

UInt16Array:0~65535

4、Buffer類:

Buffer類是基於Uint8Array的,因此其值為0~255的整數數組

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!    

推薦閱讀: