Windows 上使用 fnm 安裝 Node.js

我決定在電腦的 Windows 系統中安裝 Node.js。(以前我都是在 WSL2 或者用 Multipass 建立的虛擬機中使用)

版本管理器

在安裝前,首先要裝上版本管理器(version manager)。

版本管理器可以讓你方便地安裝不同版本的 Node.js,並在不同的專案中輕鬆切換使用,實用度極高。

在 Node.js 中最知名的版本管理器大概是 nvm(Node Version Manager),但它並不支援 Windows。而且我之前在 macOS 上使用 nvm,導致我打開 Terminal 的時間大幅增加,必須另外修改 Shell 的 rc 檔才能解決,因此我對它的印象並不好。

我記得 fnm 這款軟體在三個平台(Windows, macOS, Linux)上都可以使用,因此這次我選擇使用 fnm 進行安裝。

Blazing fast!

圖片來源:fnm 官網

安裝 fnm

官網指出 Windows 可以透過 ScoopChocolateCargo 進行安裝,但我並不喜歡這些方式。

我最後選擇的是直接安裝已經編譯好的執行檔,這樣既乾淨又方便:

這裡下載最新版的 fnm-windows.zip

下載完成後,將裡面的 fnm.exe 解壓縮到你想要放置的地方。我將它放在了 C:\Program Files\fnm-v1.31.0 資料夾中。

然後把含有 fnm.exe 的路徑加入到 PATH 中。如果你不知道如何設置 PATH,可以參考這裡這裡

安裝 Node.js

設置好 PATH 之後,打開或重啟 Terminal,輸入 fnm -version 就可以看到已經安裝好的 fnm 版本了。

1
2
PS C:\Users\oldestdream> fnm --version
fnm 1.31.0

接著我想要安裝最新的長期支援版本(即 LTS 版)。根據官網的資訊,目前的版本是 v16.14.2

我使用 fnm list-remote 指令來查看可以安裝的 Node.js 版本。

目前最新的版本為 v16.14.2,因此我使用 fnm install v16.14.2 指令來安裝。

安裝完成後,可以用 fnm list 指令來查看目前已經安裝的版本:

1
2
3
PS C:\Users\oldestdream> fnm list
* v16.14.2 default
* system

已經下載的 Node.js 會被放在以下路徑:

1
C:\Users\oldestdream\AppData\Roaming\fnm

修改 PowerShell profile

當你重啟 Terminal 並輸入 node -v 指令來查看安裝後的版本時,你會發現找不到 node。這是因為我們需要在載入 Shell 時,先執行 fnm env 所提供的設置。

1
2
node: The term 'node' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

解決方法很簡單,在 PowerShell 中輸入 $PROFILE,你會看到一個路徑:

1
2
PS C:\Users\oldestdream> $PROFILE
C:\Users\oldestdream\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

你可能找不到這個文件,也可能這個路徑不存在。

如果不存在的話,你需要根據這個路徑自行創建該文件。

在文件中加入以下這行代碼即可:

1
fnm env --use-on-cd | Out-String | Invoke-Expression

記得保存文件~

測試

重啟 Terminal(PowerShell),再次嘗試輸入 node -vnpm -v,你會發現它們都可以正常使用了。

1
2
3
4
PS C:\Users\oldestdream> node -v
v16.14.2
PS C:\Users\oldestdream> npm -v
8.5.0

cmd 設定

由於我平時主要使用 PowerShell 而不是 cmd,因此我並未進行相關設定。

如果你對此有興趣,可以參考官方的說明:

https://github.com/Schniz/fnm#windows-command-prompt-aka-batch-aka-wincmd

References

https://github.com/Schniz/fnm

https://nodejs.org/en/download/package-manager/

comments powered by Disqus