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分鐘 一次以保證盡量與官方服務同步。