๋ฐ˜์‘ํ˜•

Node ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ ์ค„๊ณง nvm์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ Rust๋กœ ์ž‘์„ฑ๋œ fnm์ด nvm์— ๋น„ํ•ด 40๋ฐฐ ์ด์ƒ ๋น ๋ฅด๋‹ค๋Š” ๊ธ€์„ ๋ณด๊ณ  ๋ฐ”๊ฟ”์•ผ๊ฒ ๋‹ค๊ณ  ๋งˆ์Œ๋จน์—ˆ๋‹ค. volta, fnm ๋‘˜ ์ค‘ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ fnm์„ ์„ ํƒํ–ˆ๋‹ค. nvm ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฑฐ์˜ ๋™์ผํ•˜๊ณ  .nvmrc ํŒŒ์ผ์„ ์ง€์›ํ•˜๋Š” ์ ์ด ๋งˆ์Œ์— ๋“ค์—ˆ๋‹ค.

 

nvm์€ bash ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ Unix ๊ณ„์—ด์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” ๋ฐ˜๋ฉด, fnm์€ Windows๋„ ์ง€์›ํ•˜๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. fnm์œผ๋กœ ๋ฐ”๊พธ๊ณ  ๋‚˜์„œ๋ถ€ํ„ฐ ํ„ฐ๋ฏธ๋„ ๋กœ๋“œ ์†๋„๊ฐ€ ํ›จ์”ฌ ๋นจ๋ผ์ง„ ๊ฒŒ ์ฒด๊ฐ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ fnm์€ Fast Node Manager์˜ ์•ฝ์ž๋‹ค.

 

 

์„ค์น˜ ๋ฐฉ๋ฒ•


๋”๋ณด๊ธฐ

โถ nvm ๊ด€๋ จ ํŒŒ์ผ ์‚ญ์ œ : rm -rf ~/.nvm

โท ~/.bashrc, ~/.bash_profile, ~/.zshrc, ~/.profile ๋“ฑ ํ”„๋กœํŒŒ์ผ์— ์žˆ๋Š” nvm ๊ด€๋ จ ๋‚ด์šฉ ์‚ญ์ œ

โธ ์‰˜ ์žฌ์‹œ์ž‘ : source ~/.zshrc

 

ํŒจํ‚ค์ง€ ์„ค์น˜

๋ฐฉ๋ฒ• 1 - Homebrew๋กœ ์„ค์น˜

brew install fnm

 

๋ฐฉ๋ฒ• 2 - ์Šคํฌ๋ฆฝํŠธ๋กœ ์„ค์น˜

curl -fsSL https://fnm.vercel.app/install | bash

 

๊ตฌ์„ฑ ์„ค์ •

fnm์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ์€ fnm env ๋’ค์— ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ „์ฒด ํ”Œ๋ž˜๊ทธ ๋ชฉ๋ก์€ fnm ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ~/.zshrc ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

eval "$(fnm env --use-on-cd --version-file-strategy=recursive)"

 

์•„๋ž˜ ๋‘ ํ”Œ๋ž˜๊ทธ ๋ชจ๋‘ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ํ™œ์„ฑํ™”ํ•ด ๋‘๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ์ถ”์ฒœํ•œ๋‹ค.

  • --use-on-cd : ํด๋” ์ด๋™์‹œ .node-version ๋˜๋Š” .nvmrc ํŒŒ์ผ์— ๋ช…์‹œํ•œ ๋…ธ๋“œ ๋ฒ„์ „์œผ๋กœ ์ž๋™ ์ „ํ™˜
  • --version-file-strategy=recursive : ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ .node-version ํŒŒ์ผ๋„ ๊ณ ๋ ค
    fnm use ๋ช…๋ น์–ด ๋’ค์— ๋ฒ„์ „๋ช…์„ ์ ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํ˜„์žฌ ํด๋”์—์„œ .node-version ํŒŒ์ผ์„ ์ฐพ๊ณ , ์—†๋‹ค๋ฉด ์ƒ์œ„ ํด๋”๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด์„œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

 

์ž๋™ ์™„์„ฑ ์„ค์ •

Oh My Zsh ์‚ฌ์šฉ์ž๋Š” ~/.zshrc ํŒŒ์ผ plugins ๋ฐฐ์—ด์— fnm์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ช…๋ น์–ด ์ž๋™ ์™„์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

plugins=(... fnm)

 

Oh My Zsh๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ~/.zshrc ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (#171 Issue ์ฐธ๊ณ )

# Homebrew์˜ zsh ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ ๊ฒฝ๋กœ๋ฅผ fpath์— ์ถ”๊ฐ€
fpath+="/opt/homebrew/share/zsh/site-functions"

# compinit ํ•จ์ˆ˜ ๋ฏธ๋ฆฌ ๋กœ๋“œ
autoload -Uz compinit

# zsh ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ ์ดˆ๊ธฐํ™”
compinit

 

 

๋…ธ๋“œ ๋ฒ„์ „ ์ž๋™ ์ „ํ™˜


์„ค์น˜๋ฅผ ์™„๋ฃŒํ•˜๊ณ  .node-version ํ˜น์€ .nvmrc ํŒŒ์ผ์— ๋…ธ๋“œ ๋ฒ„์ „์„ ๋ช…์‹œํ•ด ๋‘๋ฉด ํ•ด๋‹น ํด๋”์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ๋…ธ๋“œ ๋ฒ„์ „์ด ์ž๋™์œผ๋กœ ์ „ํ™˜๋œ๋‹ค. ํ•ด๋‹น ๋…ธ๋“œ ๋ฒ„์ „์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์„ค์น˜ ์—ฌ๋ถ€๋ฅผ ๋ฌป๋Š” ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

# .node-version ํŒŒ์ผ ์˜ˆ์‹œ
20.14.0

 

echo ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด .node-version ํŒŒ์ผ์„ ๋” ํŽธํ•˜๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

# echo ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ .node-version ํŒŒ์ผ์— ๋ฎ์–ด์“ฐ๊ธฐ
echo '20.14.0' > .node-version

 

 

์ฃผ์š” ๋ช…๋ น์–ด


์„ค์น˜ํ•œ ๋…ธ๋“œ๋Š” ~/.local/share/fnm/node-versions/v<version> ๊ฒฝ๋กœ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

# ์ง€์ •ํ•œ ๋…ธ๋“œ ๋ฒ„์ „ ์„ค์น˜
fnm install <version>

# LTS ๋ฒ„์ „ ๋…ธ๋“œ ์„ค์น˜
fnm install --lts

# ์ง€์ •ํ•œ ๋…ธ๋“œ ๋ฒ„์ „ ์‚ญ์ œ
fnm uninstall <version>

# ๋กœ์ปฌ์— ์„ค์น˜ํ•œ ๋ชจ๋“  ๋…ธ๋“œ ๋ฒ„์ „ ์ถœ๋ ฅ
fnm list
fnm ls

# ๋ชจ๋“  ์›๊ฒฉ ๋…ธ๋“œ ๋ฒ„์ „ ์ถœ๋ ฅ
fnm list-remote
fnm ls-remote

# ์ง€์ •ํ•œ ๋…ธ๋“œ ๋ฒ„์ „ ์‚ฌ์šฉ
fnm use <version>

# ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •ํ•œ ๋…ธ๋“œ ๋ฒ„์ „ ์‚ฌ์šฉ
fnm use default

# ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ ๋…ธ๋“œ ๋ฒ„์ „ ์‚ฌ์šฉ
fnm use system

# ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ๋…ธ๋“œ ๋ฒ„์ „ ์ถœ๋ ฅ
fnm current

# ๊ธฐ๋ณธ ๋…ธ๋“œ ๋ฒ„์ „ ์„ค์ •
fnm default <version>

# ๋…ธ๋“œ ๋ฒ„์ „ ๋ณ„์นญ ์„ค์ •
fnm alias <version> <name>

# ๋…ธ๋“œ ๋ฒ„์ „ ๋ณ„์นญ ์ œ๊ฑฐ
fnm unalias <name>

 

 

๊ธ€๋กœ๋ฒŒ ํŒจํ‚ค์ง€ ์žฌ์„ค์น˜


nvm์€ --reinstall-packages-from=<old-version> ์˜ต์…˜์„ ํ†ตํ•ด ๊ธฐ์กด ๋…ธ๋“œ ๋ฒ„์ „์— ์„ค์น˜๋œ ๊ธ€๋กœ๋ฒŒ NPM ํŒจํ‚ค์ง€๋“ค์„, ์ƒˆ๋กœ ์„ค์น˜ํ•  ๋…ธ๋“œ ๋ฒ„์ „์— ์žฌ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„์‰ฝ๊ฒŒ๋„ fnm์€ ์ด๋Ÿฌํ•œ ์˜ต์…˜์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. GPT ๋„์›€์„ ๋ฐ›์•„ ๊ธ€๋กœ๋ฒŒ ํŒจํ‚ค์ง€๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ดค๋‹ค(์•„๋ž˜ Gist ๋งํฌ ์ฐธ๊ณ ).

 

 

Update to Node.js LTS and Migrate Global NPM Packages

Update to Node.js LTS and Migrate Global NPM Packages - update-node-lts.sh

gist.github.com

 

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ๋…ธ๋“œ ๋ฒ„์ „์— ์„ค์น˜๋œ ๊ธ€๋กœ๋ฒŒ NPM ํŒจํ‚ค์ง€๋“ค์„ ์ƒˆ๋กœ ์„ค์น˜ํ•  ๋…ธ๋“œ ๋ฒ„์ „์— ์žฌ์„ค์น˜ํ•œ๋‹ค. -v ํ”Œ๋ž˜๊ทธ๋กœ ์„ค์น˜ํ•  ๋…ธ๋“œ ๋ฒ„์ „์„ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์ƒ๋žตํ•˜๋ฉด LTS ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ํ•œ๋‹ค.

 

# ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋ช…๋ น์–ด
curl -fsSL https://gist.githubusercontent.com/romantech/83ac87cea4e9a6d7a0985f610df329e5/raw/decd27fb4fb3c0aa6563a74e000dc00974f6f1e9/update-node-lts.sh | bash -s -- -v lts

 

์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™”๋ฉด

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•