前端學習筆記|NodeJS核心基礎

NodeJS簡介

1.什么是Node.js?

Node.js是一個基于"Chrome V8引擎"的JavaScript"運行環境"。

2.什么是V8引擎?

V8引擎是一款專門解釋和執行JavaScript代碼的虛擬機。任何程序只要集成了V8引擎,就可以執行JavaScript代碼。瀏覽器集成了V8引擎,可以執行JavaScript代碼;將V8引擎嵌入到NodeJS中,那么我們寫的JavaScript代碼就會被NodeJS所執行。

3.什么是運行環境?

運行環境就是生存環境。

地球是人類的生存環境,瀏覽器是網頁的生存環境,windows是.exe應用程序的生存環境,Android是.apk應用程序的生存環境。也就是說運行環境就是特定事物的生存環境。

NodeJS也是一個生存環境。由于NodeJS中集成了V8引擎,所以NodeJS是JavaScript應用程序的一個生存環境。

總之NodeJS不是一門編程語言,NodeJS是一個運行環境,。由于這個運行環境集成了V8引擎,所以在這個運行環境下可以運行JavaScript代碼。這個運行環境最大的特點就是提供了可以操作”操作系統底層的API“。通過這些底層API,我們可以編寫出網頁中無法實現的功能,比如:打包工具, 網站服務器等等。

NodeJS運行環境搭建

如何搭建NodeJS運行環境呢?常見的方式有2種。

a.搭建方式一:

1.NodeJS官網下載.msi安裝包。


2.全程下一步。
3.在cmd命令行工具中輸入node -v并按回車鍵,如果看到了版本號,就說明NodeJS已經安裝好了。


b.搭建方式二:

1.下載nvm-windows,選擇nvm-noinstall.zip下載。


2.創建一個文件夾,例如在C盤新建文件夾并重命名為Dev。
3.在Dev中創建兩個子目錄NVM和Node, 并且把nvm-noinstall.zip包解壓進去NVM目錄中。
4.選中install.cmd文件并右鍵選擇【以管理員身份運行】,在終端中直接按下回車,將彈出的文件settings.txt另存為到NVM目錄。
5.打開settings.txt文件,修改如下:
root: C:\Dev\NVM
path: C:\Dev\Node
6.配置環境變量:
NVM_HOME: C:\Dev\NVM
NVM_SYMLINK: C:\Dev\Node
在Path中添加 %NVM_HOME%? 和? %NVM_SYMLINK%


7.在cmd命令行工具中輸入nvm version并按回車鍵,看到版本號說明已經安裝好了。


NVM常用命令:

- nvm list 查看當前安裝的Node.js所有版本
- nvm install 版本號 安裝指定版本的Node.js
- nvm uninstall 版本號 卸載指定版本的Node.js
- nvm use 版本號 選擇指定版本的Node.js

NodeJS執行JS代碼

瀏覽器和NodeJS都集成了V8引擎(注釋:V8引擎是JavaScript引擎之一,常見的JavaScript引擎還有SpiderMonkey,JaegerMonkey, Carakan,Nitro, KJS等)。瀏覽器和NodeJS如何執行JS代碼呢?

瀏覽器執行JavaScript的方式:

a.可以直接在瀏覽器控制臺中執行JS代碼。b.可以在瀏覽器中執行JS文件中的JS代碼。

NodeJS執行JavaScript的方式:

a.可以直接在命令行工具中編寫執行JS代碼(REPL -- Read Eval Print Loop:交互式解釋器)。在cmd命令行中輸入node并按回車鍵進入REPL環境。


b.可以在命令行工具中執行JS文件中的JS代碼。



NodeJS環境和瀏覽器環境執行JS代碼區別

NodeJS環境和瀏覽器環境一樣都是一個JS的運行環境,都可以執行JS代碼。但是由于宿主不同,所以特點也有所不同。

1.內置對象不同

瀏覽器環境中提供了全局對象window,NodeJS環境中的全局對象不叫window,叫global。

2.this默認指向不同

瀏覽器環境中全局this默認指向window,NodeJS環境中全局this默認指向空對象{}。

3.API不同

瀏覽器環境中提供了操作節點的DOM相關API和操作瀏覽器的BOM相關API。NodeJS環境中沒有HTML節點也沒有瀏覽器,所以NodeJS環境中沒有DOM/BOM。

NodeJS全局屬性和方法

和瀏覽器一樣,NodeJS環境中的全局對象也提供了很多屬性和方法供我們使用。


例如:

__dirname: 當前文件所在文件夾的絕對路徑
__filename: 當前文件的絕對路徑
setInterval / clearInterval : 和瀏覽器中window對象上的定時器一樣
setTimeout / clearTimeout : 和瀏覽器中window對象上的定時器一樣
console : 和瀏覽器中window對象上的打印函數一樣

NodeJS自定義模塊

什么是模塊?

1.瀏覽器開發中的模塊

在瀏覽器開發中為了避免命名沖突,方便維護等等,我們采用類或者立即執行函數的方式來封裝JS代碼,以避免命名沖突和提升代碼的可維護性。其實這里的一個類或者一個立即執行函數就是瀏覽器開發中的一個模塊。

例如:let obj = { 模塊中的業務邏輯代碼 };? (function(){ 模塊中的業務邏輯代碼; window.xxx = xxx; })();??

2.NodeJS開發中的模塊

NodeJS采用CommonJS規范實現了模塊系統。CommonJS規范規定了如何定義一個模塊,如何暴露(導出)模塊中的變量和函數,以及如何使用定義好的模塊。

- 在CommonJS規范中一個文件就是一個模塊
- 在CommonJS規范中每個文件中的變量函數都是私有的,對其他文件不可見的
- 在CommonJS規范中每個文件中的變量函數必須通過exports暴露(導出)之后其它文件才可以使用
- 在CommonJS規范中想要使用其它文件暴露的變量函數必須通過require()導入模塊才可以使用

NodeJS模塊導出數據幾種方式

在NodeJS中想要導出模塊中的變量函數,有三種方式。

1.通過exports.xxx = xxx導出

2.通過module.exports.xxx = xxx導出

3.通過global.xxx = xxx導出

需要注意:a.無論通過哪種方式導出, 使用時都需要先導入(require)才能使用。b.通過global.xxx方式導出不符合CommonJS規范,不推薦使用。

exports和module.exports區別

exports只能通過 exports.xxx方式導出數據,不能直接賦值。module.exports既可以通過module.exports.xxx方式導出數據,也可以直接賦值。但是在實際開發中,無論以哪種方式導出都不要直接賦值。

NodeJS-Require注意點

1.require導入模塊時可以不添加導入模塊的類型

如果沒有指定導入模塊的類型,那么會依次查找.js? .json? .node文件。無論是三種類型中的哪一種, 導入之后都會轉換成JS對象返回給我們。

2.導入自定義模塊時必須指定路徑

require可以導入"自定義模塊(文件模塊)"、"系統模塊(核心模塊)"、"第三方模塊"。導入"自定義模塊"模塊時前面必須加上路徑。而導入"系統模塊"和"第三方模塊"是不用添加路徑,因為"系統模塊"直接到環境變量配置的路徑中查找,"第三方模塊"會按照module.paths數組中的路徑依次查找。

NodeJS包和包管理簡介

1.什么是包?

在編寫代碼的時候盡量遵守單一原則。一個函數盡量只做一件事情。例如:讀取數據函數/寫入數據函數/生成隨機數函數等等,不要一個函數既讀取數據又寫入數據又生成隨機數,這樣代碼容易出錯, 也難以維護。

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

簡單理解:一個模塊是一個單獨的文件, 一個包中可以有一個或多個模塊。

2.NodeJS包的管理

為了方便開發人員發布、安裝和管理包,NodeJS推出了一個包管理工具NPM(Node Package Manager)。
NPM不需要我們單獨安裝,只要搭建好NodeJS環境就已經自動安裝好了。
NPM相當于電腦上的"軟件助手",我們通過NPM可以快速找到和安裝我們需要的包,可以快速刪除我們不需要的包。

NodeJS-NPM使用

1.NPM包安裝方式

NPM包安裝分為全局安裝和本地安裝。這兩種方式有什么區別呢?區別就是安裝包的位置不一樣。

全局安裝的包存儲在全局node_modules中,在同一臺電腦上任何位置都可以使用,一般用于安裝全局使用的工具。

本地安裝的包存儲在當前項目node_modules中,只能在當前項目下可以使用,一般用于安裝當前項目使用的包。

全局安裝指令:

npm install -g 包名 (默認安裝最新版本)
npm uninstall -g 包名
npm update -g 包名 (更新失敗可以直接使用install)

2.初始化本地包

初始化指令:

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

包描述文件 package.json, 定義了當前項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)。
npm install 命令根據這個配置文件,自動下載所需的模塊,也就是配置項目所需的運行和開發環境。所以將項目拷貝給其他人或者發布的時候,我們不用把所有的包拷貝給別人,因為那樣文件太大不利于部署,我們只需要把 package.json 復制過去就可以了,npm會根據這個 package.json 文件去下載需要的包。
注意點:package.json文件中, 不能加入任何注釋。


- dependencies:生產環境中使用的包的依賴,通常是穩定長期支持版本的包,一個關聯數組,由包的名稱和版本號組成
- devDependencies:開發環境中使用的包的依賴,通常是開發中的或者最新版本的包,一個關聯數組,由包的名稱和版本號組成

本地安裝指令:


有些包可能只在項目開發階段需要,而在項目上線階段不需要,所以需要分開指定:


npm install 和 npm install --development 會安裝dependencies和devDependencies里面的包,也就是所有的包都會被安裝。npm install --production?只會安裝dependencies中的包。

NodeJS-NRM使用

1.什么是nrm?

由于npm默認會去國外下載資源,所以對于國內開發者來說下載會比較慢。有人寫了一個nrm工具, 允許將資源下載地址從國外切換到國內,以提高下載包的速度。

2.NRM指令

a.安裝NRM: npm install -g nrm

b.查看是否安裝成功:nrm --version


能看到版本號,說明安裝成功了。

c.查看允許切換的資源地址:nrm ls


標*的是當前使用的源(下載網址)。

d.切換源:nrm use taobao

淘寶資源地址和國外的地址內容完全同步。淘寶鏡像與官方同步頻率目前為 10分鐘 一次以保證盡量與官方服務同步。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373