NodeJS

NVM常用命令

1.nvm list 查看當(dāng)前安裝Node.js所有版本
2.nvm install 版本號 安裝指定版本的Node.js
3.nvm uninstall 版本號 卸載指定版本的Node.js
4.nvm use 版本號 選擇指定版本的Node.js

NodeJS環(huán)境和瀏覽器環(huán)境執(zhí)行JS代碼區(qū)別

1.Node環(huán)境和瀏覽器環(huán)境區(qū)別

Node JS環(huán)境和瀏覽器一樣都是一個(gè)JS的運(yùn)行環(huán)境,都可以執(zhí)行JS代碼,但是由于宿主不同所以特點(diǎn)也有所不用

1.1內(nèi)置對象不同
  • 瀏覽器環(huán)境中提供了window全局對象
  • Node JS環(huán)境中的全局對象不叫window,叫g(shù)lobal。
1.2this默認(rèn)指向不同
  • 瀏覽器環(huán)境中全局this默認(rèn)指向window
  • Node JS環(huán)境中全局this默認(rèn)指向空對象{}
1.3API不同
  • 瀏覽器環(huán)境中提供了操作節(jié)點(diǎn)的DOM相關(guān)API和操作瀏覽器的BOM相關(guān)API
  • Node JS環(huán)境中沒有HTML節(jié)點(diǎn)也沒有瀏覽器,所以Node JS環(huán)境中沒有DOM/BOM

自定義模塊

1.什么是模塊?

1.1瀏覽器開發(fā)中的模塊
在瀏覽器開發(fā)中為了避免命名沖突,方便維護(hù)等等,我們采用類或者立即執(zhí)行函數(shù)來封裝JS代碼,來避免命名沖突和提升代碼的維護(hù)性,其實(shí)這里的一個(gè)類或者一個(gè)立即執(zhí)行函數(shù)就是瀏覽器開發(fā)中一個(gè)模塊。

let obj = {
  模塊中的業(yè)務(wù)邏輯代碼
};
;(function() {
  模塊中的業(yè)務(wù)邏輯代碼
  window.xxx = xxx;
}) ();

存在的問題:沒有標(biāo)準(zhǔn)沒有規(guī)范

1.2Node JS開發(fā)中的模塊
Node JS采用Common JS規(guī)范實(shí)現(xiàn)了模塊系統(tǒng)

1.3CommonJS規(guī)范
CommonJS規(guī)范規(guī)定了如何定義一個(gè)模塊,如何暴露(導(dǎo)出)模塊中的變量函數(shù),以及如何使用定義好的模塊

  • 在CommonJS規(guī)范中一個(gè)文件就是一個(gè)模塊
  • 在CommonJS規(guī)范中每個(gè)文件中的變量函數(shù)都是私有的,對其他文件不可見的
  • 在CommonJS規(guī)范中每個(gè)文件中的變量函數(shù)必須通過exports暴露(導(dǎo)出)之后其他文件才可以使用
  • 在CommonJS規(guī)范中想要其他文件暴露的變量函數(shù)必須通過require()導(dǎo)出模塊才可以使用

NodeJS-Require注意點(diǎn)

1.exports和module.exports區(qū)別
exports只能通過exports.xxx方式導(dǎo)出數(shù)據(jù),不能直接賦值
module.exportx既可以通過module.exportx.xxx方式導(dǎo)出數(shù)據(jù),也可以直接賦值

注意點(diǎn):
在企業(yè)開發(fā)中無論哪種方式都不要直接賦值,這個(gè)問題只會在面試中出現(xiàn)

1require注意點(diǎn):

1.1require導(dǎo)入模塊時(shí)可以不添加模塊的類型,如果沒有指定導(dǎo)入模塊的類型,那么會依次查找.js .json .node文件,無論是三種類型中的哪一種,導(dǎo)入之后都會轉(zhuǎn)換成JS對象返回給我們

1.2導(dǎo)入自定義模塊時(shí)必須指定路徑

require可以導(dǎo)入“自定義模塊(文件模塊)”,“系統(tǒng)模塊(核心模塊)”,“第三方模塊”
導(dǎo)入“自定義模塊”模塊時(shí),前面必須加上路徑
導(dǎo)入“系統(tǒng)模塊”和“第三方模塊”是不需要添加路徑的

Node包和包管理

1.什么是包?

前面說過在編寫代碼的時(shí)候盡量遵守單一原則,也就是一個(gè)函數(shù)盡量只做一件事情
例如:讀取數(shù)據(jù)函數(shù)/寫入數(shù)據(jù)函數(shù)/生成隨機(jī)數(shù)函數(shù)等等,不要一個(gè)函數(shù)既讀取數(shù)據(jù)又寫入數(shù)據(jù)又生成隨機(jī)數(shù),這樣寫代碼非常容易出錯,也非常難以維護(hù)

在模塊化開發(fā)中也是一樣,在一個(gè)模塊(一個(gè)文件中)盡量只完成一個(gè)特定的功能,但是有些比較復(fù)雜的功能可能需要由多個(gè)模塊組成
例如:jQuery選擇器相關(guān)的代碼在A模塊,css相關(guān)的代碼在B模塊.....我們需要把這些模塊組合在一起才是完成的jQuery,那么這個(gè)時(shí)候我們就需要一個(gè)東西來維護(hù)多個(gè)模塊之間的關(guān)系,這個(gè)維護(hù)多個(gè)模塊之間的東西就是“包”

簡而言之:一個(gè)模塊就是一個(gè)單獨(dú)的文件,一個(gè)包中可以一個(gè)或者多個(gè)模塊

2.NodeJS包的管理

在NodeJS中為了方便開發(fā)人員發(fā)布,安裝和管理包,Node JS推出了一個(gè)包管理工具
NPM(Node Package Manager)
NPM不需要我們單獨(dú)安裝,只要搭建好Node JS環(huán)境就已經(jīng)自動安裝好了
NPM就相當(dāng)于電腦上的“QQ管家軟件助手”,通過NPM我們可以快速找到我們需要的包,可以快速安裝我們需要的包,可以快速刪除我們不想要的包等等

NPM使用

1.NPM包安裝方式
  • 全局安裝(一般用于安裝全局使用的工具,存儲在全局node_modules中)
    npm install -g 包名(默認(rèn)安裝最新版本)
    npm uninstall -g 包名 (刪除這個(gè)包)
    npm update -g 包名(更新包)

-本地安裝 (一般用于安裝當(dāng)前項(xiàng)目使用的包,存儲在當(dāng)前項(xiàng)目node_modules中)
npm install 包名(默認(rèn)安裝最新版本)
npm uninstall 包名 (刪除這個(gè)包)
npm update 包名(更新包)

2.初始化本地包

npm init 初始化package.json文件
npm init -y 初始化package.json文件

npm i 所有的包都會被安裝
npm i --production 只會安裝dependencies中的包

Yarn的使用

1什么是Yarn?

Yarn是由Facebook,Google,Exponent和Tilde聯(lián)合推出的一個(gè)新的JS包管理工具,Yarn是為了彌補(bǔ)npm5.0之前的一些缺陷而出現(xiàn)的

注意點(diǎn):
在npm5.0之前,yarn的優(yōu)勢的特別明顯,但是現(xiàn)在NPM已經(jīng)更新到10.1.x了,隨著NPM的升級,NPM的優(yōu)化,甚至超越了Yarn,所以個(gè)人還是建議使用NPM

2.NPM的缺陷:

2.1npm install的時(shí)候太慢
npm 是按照隊(duì)列執(zhí)行每個(gè) package,也就是說必須要等到當(dāng)前package安裝完成之后,才能繼續(xù)后面的安裝

API-Bufffer

準(zhǔn)備知識

1.計(jì)算機(jī)只能識別0和1(因?yàn)橛?jì)算機(jī)只認(rèn)識通電和斷電兩種狀態(tài))
2.所有存儲在計(jì)算機(jī)上的數(shù)據(jù)都是0和1組成的(數(shù)據(jù)越大0和1就越多)

1.什么是Buffer?

Buffer是Node JS全局對象上的一個(gè)類,是一個(gè)專門用于存儲字節(jié)數(shù)據(jù)的類
Node JS提供了操作計(jì)算機(jī)底層API,計(jì)算底層只能識別0和1,所以就提供了一個(gè)專門用于存儲字節(jié)數(shù)據(jù)的類

2.如何創(chuàng)建一個(gè)Buffer對象
2.1創(chuàng)建一個(gè)指定大小的Buffer

Buffer.alloc(size[, fill[, encoding]])

2.2根據(jù)數(shù)據(jù)/字符串創(chuàng)建一個(gè)Buffer對象

Buffer.from(string[, encoding])

3.Buffer對象本質(zhì)

本質(zhì)就是一個(gè)數(shù)組

1.將二進(jìn)制數(shù)據(jù)裝換成字符串

返回:<string> 轉(zhuǎn)換后的字符串?dāng)?shù)據(jù)。
buf.toString();

2.往Buffer中寫入數(shù)據(jù)

string <string> 要寫入buf的字符串。
offset <insteger> 開始寫入 string 之前要跳過的字節(jié)數(shù)。默認(rèn)值:0。
length <integer>要寫入的字節(jié)數(shù)。默認(rèn)值:buf.length - offset。
encoding <string> string的字符編碼。默認(rèn)值:‘utf8’。
返回:<integer> 已寫入的字節(jié)數(shù)。
buf.write(string[, offset[, length]][, encoding])

3.從指定位置截取新Buffer

start <integer> 新Buffer開始的位置。默認(rèn)值:0。
end <integer> xinBuffer結(jié)束的位置(不包含)buf.slice([start[, end]])

API-Buffer靜態(tài)方法

1.檢查是否支持某種編碼格式

Buffer.isEncoding(encoding)

2.檢查是否是Buffer類型對象

Buffer.isBuffer(obj)totalLength

3.獲取Buffer實(shí)際字節(jié)長度

Buffer.buteLength(string[, enconding])
注意點(diǎn):一個(gè)漢字占用三個(gè)字節(jié)

4.合并Buffer中的數(shù)據(jù)
buffer.concat(list[, total'Length])

搭建web服務(wù)器

1.什么是HTTP模塊

通過 Node JS提供的HTTP模塊,我們可以快速的構(gòu)造一個(gè)web服務(wù)器
也就是快速實(shí)現(xiàn)過去PHP服務(wù)器的功能(接受瀏覽器請求,響應(yīng)瀏覽器請求等)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容