Node.js的介紹
什么是 Node.js(官方解釋)
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 代碼運行環境。 Node.js使用了一個事件驅動、非阻塞式I/O的模型( Node.js的特性),使其輕量級又高效。 Node.js 的包管理器 npm 是全球最大的開源庫生態系統。
如上圖所示:
- Node 內部采用 Google Chrome 的 V8 引擎,作為 JavaScript 語言解釋器;
- 通過自行開發的 libuv 庫,調用操作系統資源。
什么是 Node.js(非官方解釋)
Node.js是 JavaScript 語言在服務器端的運行環境(平台)。Node.js 不是一門語言,也不是 JavaScript 的框架。
- 與PHP、JSP、Python、Perl、Ruby的“既是語言,也是平台”不同,Node.js的使用JavaScript進行編程,運行在 Chrome 的 V8 引擎上。
- 與PHP、JSP等相比(PHP、JSP、.net都需要運行在服務器程序上,Apache、Naginx、Tomcat、IIS。
),Node.js跳過了Apache、Naginx、IIS等HTTP服務器,它自己不用建設在任何服務器軟件之上。Node.js的許多設計理念與經典架構(LAMP = Linux + Apache + MySQL + PHP)有着很大的不同,可以提供強大的伸縮能力。Node.js沒有web容器。
運行環境(平台)的含義
- 首先,JavaScript 語言通過 Node 在服務器上運行,在這個意義上,Node 有點像 JavaScript 虛擬機。
- 其次,Node 生態系統活躍,提供了大量的開源庫,使得 JavaScript 語言能與操作系統進行交互(比如讀寫文件、新建子進程),在這個層次上,Node 又是屬於 JavaScript 的工具庫。
為什么要學習服務器端開發
- 能夠和后台開發的程序員更佳緊密地結合、更順暢地溝通。
- 當網站的業務邏輯需要前置時,前端人員需要學習一些后台開發的技術,以完成相應的任務。
- 拓寬知識視野和技術棧,能夠站在全局的角度審視整個項目。
為什么選擇 Node.js 做后台開發
- 使用 JavaScript 語言 開發服務器端應用。
- 一些公司要求前端工程師掌握 Node.js 開發。
- Node.js 生態系統活躍,提供了大量的開源庫。
Node.js的發展
Node 的歷史
- 2008年左右,隨着 Ajax 的逐漸普及,Web 開發逐漸走向復雜化,系統化;
- 2009年2月,Ryan Dahl 想要創建一個輕量級,適應現代 Web 開發的平台;
- 2009年5月,Ryan Dahl 在 GitHub 中開源了最初版本,同年11月,JSConf 就安排了 Node 講座;
- 2010年底,Joyent 公司資助,Ryan Dahl 也加入了該公司,專門負責 Node 的開發;
- 2011年7月,在微軟的支持下登陸 Windows 平台。PS:node 的生產環境基本是在 Linux 下。
據 Node.js 創始人 Ryan Dahl 回憶,他最初希望采用 Ruby,但是 Ruby 的虛擬機效率不行。
注意:是 Node 選擇了 JavaScript,不是 JavaScript 發展出來了一個 Node。
Node.js的主要應用領域
- RESTFul API
- 實時通信:如消息推送等
- 高並發
- I/O阻塞
知名度較高的Node.js開源項目
- express:Node.js中著名的web服務器框架。
- Koa:下一代的 Node.js 的 Web 框架。
- mocha:功能強大的 node.js 測試框架。
- PM2:node 本來是單進程的,PM2可以實現和管理多進程。
- jade:非常優秀的模板引擎,不僅限於 js 語言。
- CoffeeScript:用簡潔的方式展示 JavaScript 優秀的部分。
- Atom:文本編輯器。
- socket.io:實時通信框架。
Node.js的特點
- 單線程
Node.js 運行環境配置:通過 Node.js 安裝包(不推薦)
去 Node.js 的官網下載安裝包:
我們也可以在https://nodejs.org/en/download/releases/ 里下載歷史版本。
注意,我們以一定要用偶數版(V4、V6等),不要用奇數版(比如V5),因為奇數版不穩定。
我們並不推薦直接采用 Node.js.msi(windows)或者 Node.js.pkg(Mac) 安裝包進行安裝,原因如下:
- 不方便 Node.js 版本的更新;
- 無法回滾到之前的版本;
- 無法在多個版本之間切換(在有些項目中,我們要使用 Node 的指定版本)。
因此,我們暫時先不用安裝 Node.js,稍后用 NVM 的方式來安裝 Node.js。
Node.js 運行環境配置:通過 NVM(推薦)
NVM:node.js version manager,用來管理 node 的版本。
我們可以先安裝 NVM,然后通過 NVM 安裝 Node.js。這是官方推薦的做法。
Windows 和 Mac 下安裝的Node.js 的步驟如下。
Windows 系統安裝 Node.js
1、安裝 NVM:
(1)我們去 https://github.com/coreybutler/nvm-windows/releases 下載 NVM 的安裝包:
下載下來后,直接解壓到 D:\web
目錄下:
(2)在上面的目錄中,新建一個settings.txt
文件,里面的內容填充如下:
root: D:\web\nvm
path: D:\web\nodejs
arch: 64
proxy
上方內容的解釋:
- root 配置為:當前 nvm.exe 所在的目錄
- path 配置為:node 快捷方式所在的目錄
- arch 配置為:當前操作系統的位數(32/64)
- proxy 不用配置
(3)配置環境變量:
NVM_HOME
=D:\web\nvm
(當前 nvm.exe 所在目錄)NVM_SYMLINK
=D:\web\nodejs
(node 快捷方式所在的目錄)- PATH +=
;%NVM_HOME%;%NVM_SYMLINK%
配置成功后,重啟資源管理器。
2、驗證:(在 cmd 命令行中輸入命令)
(1)輸入nvm
命令查看環境變量是否配置成功:
(2)輸入 nvm ls
,查看已安裝的所有 node 版本。
(3)輸入 nvm -v
,查看 已安裝的 nvm 版本。
(4)輸入 node -v
,查看正在使用的 node 版本。
- 參考鏈接:安裝npm,nvm,node
如果 Node 安裝失敗,可以參考上面這個鏈接。
3、安裝指定版本的 Node.js:
nvm install 版本號
# 舉例
nvm install 8.10.0
輸入 node -v
,查看當前使用的 node 版本。
關於 NVM 的常用命令,詳見下一段。
Mac 系統安裝 Node.js
1、安裝 NVM:
(1)打開 終端.app,輸入:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
安裝成功的界面:
完成后,nvm就被安裝在了~/.nvm
下。
如果發現安裝失敗:
原因:Xcode 軟件進行過更新。
解決辦法:打開 Xcode 軟件,同意相關內容即可。
(2)配置環境變量:
編輯器打開~/.bash_profile
文件,如果不會就輸入open ~/.bash_profile
。
(補充:如果你的Mac電腦里找不到~/.bash_profile
文件,那就找找有沒有~/.profile
文件,或者~/.bashrc
文件,或者~/.zshrc
文件)。
在最后一行輸入:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
如果你發現文件中已經存在了上面這行代碼,就不用往里面加了。這一步的作用是每次新打開一個bash,nvm都會被自動添加到環境變量中。
最后,輸入 source ~/.bash_profile
重啟環境變量的配置。
PS:NVM 現在已經不支持 Homebrew 的方式來安裝了。
參考鏈接:https://www.jianshu.com/p/a3f8778bc0a1
2、驗證:(在 終端命令行中輸入命令)
(1)輸入 nvm
命令查看環境變量是否配置成功:
(2)輸入 nvm ls
,查看已安裝的所有 node 版本。
(3)輸入 nvm -v
,查看 已安裝的 nvm 版本。
(4)輸入 node -v
,查看正在使用的 node 版本。
3、安裝指定版本的 Node.js:
和Windows下一樣,也是執行如下命令:
nvm install 版本號
# 舉例
nvm install 8.10.0
網速有點慢,要稍等。
輸入 node -v
,查看當前使用的 node 版本。
安裝好 Node
之后,npm
也會自動安裝的,輸入 npm -v
,查看 npm 的版本。
關於 NVM 的常用命令,詳見下一段。
NVM 的常用命令
注意,這一段說的是 NVM 的常用命令,不是 Node的 常用命令。
查看當前使用的 nvm 版本:
nvm -v
nvm --version
查看本地安裝的所有的 Node.js 版本:
nvm list|ls
安裝指定版本的 Node.js:
nvm install 版本號
# 舉例
nvm install 8.10.0
卸載指定版本 Node.js:
nvm uninstall 版本號
切換使用指定版本的node:
nvm use 版本號
Node.js 的常用命令
查看 node 的版本:
node -v
執行腳本字符串:
node -e 'console.log("Hello World")'
運行腳本文件:
node index.js
node path/index.js
node path/index
查看幫助:
node --help
進入 REPL 環境:
node
REPL 的全稱:Read、Eval、 Print、Loop。類似於瀏覽器的控制台。
如果要退出 REPL 環境,可以輸入.exit
或 process.exit()
。
在 VS Code 里,我們可以在菜單欄選擇“幫助->切換開發人員工具”,打開console控制台。
包和 NPM
什么是包
由於 Node 是一套輕內核的平台,雖然提供了一系列的內置模塊,但是不足以滿足開發者的需求,於是乎出現了包(package)的概念:
與核心模塊類似,就是將一些預先設計好的功能或者說 API 封裝到一個文件夾,提供給開發者使用。
Node 本身並沒有太多的功能性 API,所以市面上涌現出大量的第三方人員開發出來的 Package。
包的加載機制
如果 Node中自帶的包和第三方的包名沖突了,該怎么處理呢?原則是:
- 先在系統核心(優先級最高)的模塊中找;
- 然后到當前項目中 node_modules 目錄中找。
比如說:
requiere(`fs`)
那加載的肯定是系統的包。所以,我們盡量不要創建一些和現有的包重名的包。
NPM的概念
包的生態圈一旦繁榮起來,就必須有工具去來管理這些包。NPM 應運而生。
NPM:Node Package Manager。官方鏈接: https://www.npmjs.com/
隨着時間的發展,NPM 出現了兩層概念:
- 一層含義是 Node 的開放式模塊登記和管理系統,亦可以說是一個生態圈,一個社區。
- 另一層含義是 Node 默認的模塊管理器,是一個命令行下的軟件,用來安裝和管理 Node 模塊。
NPM 的安裝(不需要單獨安裝)
NPM 不需要單獨安裝。默認在安裝 Node 的時候,會連帶一起安裝 NPM:
NVM、Node、NPM 安裝之后,目錄分布如下:
輸入 npm -v
,查看 npm 的版本:
如果上方命令無效,可能是之前的 node 並沒有完全安裝成功。解決辦法:https://segmentfault.com/a/1190000011114680
另外,Node 附帶的 NPM 可能不是最新版本,可以用下面的命令,更新到最新版本:
npm install npm -g
配置 NPM 的全局目錄(暫略)
NPM 默認安裝到當前正在使用 Node 版本所在目錄下。我們建議重新配置 NPM 的全局目錄。
輸入npm config ls
,查看:
NPM的常用命令
- npm init --yes
項目的初始化。執行完成后,會生成package.json
文件。
- npm install [package]
只在當前工程下安裝 package。
- npm install -g [package]
在全局環境下安裝 package。
- npm run [script]
NRM的安裝(Win 和 Mac 通用)
由於 NPM 的資源都在國外,有時候會被牆,導致無法下載或者很慢。此時可以用到NRM。
NRM:Node Registry Manager。作用是:切換和管理包的鏡像源。
- 項目地址:https://www.npmjs.com/package/nrm
- GitHub地址: https://github.com/Pana/nrm
安裝 NRM:
npm install -g nrm
NRM 的常用命令:
# 顯示全部的鏡像
nrm ls
# 使用淘寶的鏡像
nrm use taobao
效果入下:
推薦的國內加速鏡像淘寶:https://npm.taobao.org/
安裝cnpm
安裝cnpm
替換npm(npm由於源服務器在國外,下載node包速度較慢,cnpm使用國內鏡像):
npm install -g cnpm --registry=https://registry.npm.taobao.org
如果我們需要通過 cnpm 去安裝一個包時,舉例如下:
cnpm i vue
解釋: i 指的就是 install。
Node 的使用
我們可以輸入node
命令,然后在里面寫 js 的代碼,也可以 通過 node 運行 js 文件。比如,編寫好一個 js文件01.js
,然后在命令行輸入:
node 01.js
就可以執行 js 程序。