1. 程式人生 > 實用技巧 >Node.js介紹和環境配置(含NVM、NPM、YARN的安裝)

Node.js介紹和環境配置(含NVM、NPM、YARN的安裝)

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 版本。

如果 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 環境,可以輸入.exitprocess.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。作用是:切換和管理包的映象源

安裝 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 程式。

YARN

官方文件:https://yarn.bootcss.com/docs/

參考文章:https://www.cnblogs.com/qianguyihao/