---
# System prepended metadata

title: 虎年行大運 ~ NodeJS 學習 - NVM、Yarn、Node 環境安裝
tags: [NodeJS]

---

# 虎年行大運 ~ NodeJS 學習 - NVM、Yarn、Node 環境安裝

## 【前言】
最近因緣際會碰了 NodeJS 這一塊完全沒有經驗的領域，趁機學習如何建置NVM、NPM、Node 環境，並嘗試用知名的 Express 框架建立 API。

這邊連動的 DB 是 Firebase，一款 Google 非常知名的雲端資料倉儲服務，其實也已經支援非常多功能了，因此就瞬邊碰碰當作經驗。

## 【NVM 安裝】
**NVM** 全名 **Node Version Manager**

即為 Node 版本控制，這會與將要使用哪一種版本的 NodeJS 進行開發完全相關，也因為 NPM 逐漸被 Yarn 取代了，因此這裡不會介紹如何安裝 NPM 的部分。

[NVM Github](https://github.com/nvm-sh/nvm)
請到上述連結進行相關環境的 NVM 檔案下載，Kai 因為是用 Windows 環境進行開發，因此另外提供適用於 Windows 的連結在此 [NVM for Windows](https://github.com/coreybutler/nvm-windows/releases)

安裝好後，可以在終端機透過以下指令確認相關訊息
```
nvm
```

![](https://i.imgur.com/LMmYLxi.png)
> 圖示就是 NVM 環境安裝好的
> 若無法取得相同結果，請檢查
> 1. 環境參數是否有正確設置 
> 2. 嘗試用系統管理者權限開啟終端機
> 3. 又或者是安裝在非 C 槽環境的話，記得去 /nvm/settings.txt 將內容改成以下
> ```
> root: D:nvm
> path: D:\nvm\nodejs
> ```
> 這樣環境指令才能正確抓到哦!

可以透過以下指令進行 NVM 的控制
| Command | Info |
| ------- | ---- |
| nvm ls-remote | 會列出目前可以下載的 NodeJS 版本 |
| nvm install [version] | 下載安裝 NodeJS，若無輸入 version 則會下載最新的版本 |
| nvm ls | 列出本地端安裝過的 NodeJS 版本 |
| nvm use [version] | 設定使用的 NodeJS 版本 |
| nvm current | 顯示目前使用的 NodeJS 版本 |

## 【Yarn】
裝好 NodeJS 的時候，其實會連同 NPM 一起裝好，但 Kai 不打算使用 NPM 協助處理套件的版本管理，因此在開好任何一個 NodeJS 專案後，在專案本地端的終端機使用以下指令進行安裝
```
npm install yarn [--g]
```
> 要不要使用 --g 裝成 Global 就看各位選擇了

未來所有的套件都可以使用 Yarn 進行處理，這時候原先採用 NPM 的檔案 **package-lock.json** 就可以刪掉改成只使用 **yarn.lock** 了

那到底 Yarn 與 NPM 差異在哪裡? 為什麼要改用 Yarn 而非沿用 NPM 就好?

Yarn 是一個比 NPM 更專門的 Package 管理服務，避免了 NPM 管理會日益肥大的問題，並有著更安全的處理模式，避免危險程式碼侵入，同時也提供更加簡單易懂的指令集。

以下分享兩者常用的指令差異

|Yarn|NPM|Info|
|----|----|----|
| yarn install | npm install | 下載所有依賴，若無輸入則會將 package.json 全數下載 | 
| yarn add [package] | npm install --save [package] | 下載特定依賴，並儲存在 package.json 中的 dependecies |
| yarn add [package] --dev | npm install --save-dev [package] | 下載特定依賴，並儲存在 package.json 中的 devDependecies |
| yarn global add [package] | npm install --global [package] | 下載特定依賴，並儲存在電腦全域 |
| | npm uninstall | 移除所有套件，Yarn 不支援移除所有套件功能 |
| yarn remove [package] | npm uninstall --save [package] | 移除特定套件 |
| yarn upgrade | rm -rf node_modules && npm install | 更新 node_modules |

## 【建立 Node Express 專案】
在建立 Express 專案的時候，可能還是要先透過 NPM 進行。

```
// 下載 Express 套件
npm install express-generator 

// 建置專案
express --view=ejs [Project Name]
```

創建後 Express 的檔案結構如下，其中 index.js 和 users.js 是預設的兩個 API 服務內容，讓新手可以快速理解如何架設 API 服務。
```
├── app.js 
├── bin 
│   └── www 
├── package.json 
├── public 
│   ├── images 
│   ├── javascripts 
│   └── stylesheets 
│       └── style.css 
├── routes 
│   ├── index.js 
│   └── users.js 
└── views     
    ├── error.ejs     
    └── index.ejs
```

此時可以透過 Yarn 進行 NodeJS API 服務的啟動

```
yarn start
```

這個指令設立在 package.json 中，會建議加上以下 dev-start 這一條
```
"scripts": {
    "start": "node ./bin/www",
    "dev-start": "set DEBUG=[Project Name]:* & yarn start"
  }
```

這樣未來就可以使用以下指令啟動開發者模式測試了

```
yarn dev-start 
```

## 【結語】
是第一次碰 NodeJS 系列的開發，非常新鮮，後續有學到不同的東西再寫上來分享。

首頁 [Kai 個人技術 Hackmd](/2G-RoB0QTrKzkftH2uLueA)

###### tags: `NodeJS`