มีนส์บล็อก

สีที่ใช้

#84e309

#0984e3

#e30984

Node Version Manager (nvm) บน Mac

nvm

หลังจากติดตั้ง Node Version Manager (nvm) บน Mac ครั้งแรก เราจะได้ไฟล์ .zshrc ดังนี้

.zshrc file at the first nvm install

เมื่อต้องการอัพเดท Node ให้มีเวอร์ชั่นล่าสุด โดยเวอร์ชั่นล่าสุดให้อิงกับ Long Term Support (LTS) ของ Node ให้ทำตามขั้นตอนดังนี้

ติดตั้ง Node LTS เวอร์ชั่นล่าสุด

ไปที่ Terminal พิมพ์คำสั่งดังนี้

nvm install 'lts/*' --reinstall-packages-from=current

โดยคำสั่งนี้จะติดตั้ง NodeJS เวอร์ชั่นล่าสุดให้ พร้อมกับแจ้ง command line อื่น ๆ ที่เกี่ยวข้องกับ Node ให้ทราบถึงการอัพเดทครั้งนี้ (Migrate) โดยเป็นการอัพเกรดจากเวอร์ชั่นปัจจุบัน

command line อื่น ๆ ในที่นี้ หมายถึงคำสั่งใด ๆ ที่ Depends บน NodeJS (Node dependencies)

เมื่อติดตั้งเสร็จแล้ว ถ้าเราใช้คำสั่ง

node -v

เครื่อง Mac จะยังแสดงเวอร์ชั่นปัจจุบันอยู่นะครับ เนื่องจาก nvm มันดูแล Node ทุกเวอร์ชั่น เราอยากใช้เวอร์ชั่นไหน เราก็ต้องแจ้งมันนิดหนึ่ง โดยทำดังนี้ครับ

สร้างไฟล์ .nvmrc

เมื่อเปิด Terminal ขึ้นมาครั้งแรก มันจะทำงานที่ Home หรือ ~ ลองพิมพ์คำสั่ง

ls -a

มันจะโชว์ไฟล์ทั้งหมดที่อยู่ใน Home ถ้าเรามองหาไฟล์ .nvmrc เราอาจไม่พบไฟล์นี้ เรามาสร้างไฟล์นี้กันครับ ด้วยคำสั่ง

echo "lts/*" > .nvmrc # to default to the latest LTS version
สำหรับคนที่สงสัยว่า echo เป็นคำสั่งในภาษาคอมพิวเตอร์มั๊ย และเป็นภาษาอะไร ตอนสมัย ม.4 (ราว พ.ศ.2533) ผมเริ่มจับคอมพิวเตอร์ครั้งแรก สมัยนั้นผมเรียน "เวิร์ด จุฬาฯ" (เราเคยรุ่งเรืองขนาดมีโปรแกรมเวิร์ดเป็นของเราเองนะ เขียนโดยหมอท่านหนึ่ง) ซึ่งทำงานบน MS-DOS หรือ Microsoft Disk Operating System -- Windows เวอร์ชั่นแรกยังไม่วางขายในขณะนั้น โดยภาษาคอมพิวเตอร์ที่ผมรู้จักเป็นภาษาแรก และเขียนบนระบบปฏิบัติการ DOS คือภาษาเบสิค และคุ้นๆว่าในภาษาเบสิคมีคำสั่ง echo ด้วย

แค่นี้เราก็จะได้ไฟล์ .nvmrc ในโฟลเดอร์ Home โดยจะมีหน้าตาแบบนี้ครับ

file .nvmrc

ทีนี้เราต้องแจ้งให้ nvm เรียกใช้เวอร์ชั่น LTS ล่าสุด โดยคำสั่ง

nvm use

โดย Terminal จะมองหาไฟล์ .nvmrc และพบว่าเราตั้งค่า lts/* เอาไว้มันจึงโต้ตอบแบบนี้ครับ

nvm use

ถ้า Terminal ตอบเรามาแบบนี้ ถือว่าเรียบร้อยแล้วครับ แต่เราไม่จำเป็นต้องใช้คำสั่ง nvm use ทุกครั้ง เมื่อมีการอัพเดท Node Version ให้เราใส่โค้ดเข้าไปในไฟล์ ~/.zshrc ดังนี้ครับ

เปิดไฟล์ .zshrc ที่อยู่ในโฟลเดอร์ Home หรือใช้สัญลักษณ์ ~ ด้วยคำสั่ง

sudo nano ~/.zshrc

ถ้าเราต้องการแก้ไขไฟล์ เราต้องเรียกใช้ด้วย sudo

ก่อนใส่โค้ด nvm use โค้ดของ nvm ในไฟล์ .zshrc จะมีแค่นี้

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

เมื่อเพิ่มโค้ด nvm use เข้าไปจะได้โค้ดตามนี้ครับ

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

กด Ctl + X แล้วตอบ Yes ครับ เรียบร้อยครับ เราก็จะได้ Node Version Manager (nvm) เรียกใช้ Node เวอร์ชั่นล่าสุดให้เราพร้อมใช้งาน บน Mac ครับ

สรุป

  1. ติดตั้ง Node LTS และ Migrate command line ที่เกี่ยวข้อง
  2. สร้างไฟล์ .nvmrc ใน Home โดยใส่ค่า lts/* ลงไปในไฟล์
  3. เขียนโค้ดเพิ่มเติมในไฟล์ ~/.zshrc เพื่อเรียกใช้ nvm use อัตโนมัติ

ผลกระทบต่อ VSCode

การใส่โค้ด nvm use เข้าไปในไฟล์ .zshrc ส่งผลให้เมื่อเรียกใช้งาน VSCode โดยใช้คำสั่ง code . จาก Terminal มันจะใช้เวลาโหลดโปรแกรม VSCode นานกว่า 3 วินาที เพราะมันต้องไป Run Script บนไฟล์ .zshrc ก่อนมันจึงจะถือว่าโหลดเสร็จ เมื่อมันใช้เวลาโหลดนานกว่า 3 วินาที VSCode มันจะฟ้อง

Resolving your shell environment is taking very long. Please review your shell configuration.
VSCode Warning

ถ้าเรารู้สึกรำคาญกับคำเตือนนี้ ให้ไปใส่ Comment โดยใส่เครื่องหมาย # ไว้หน้าโค้ดในส่วนของ nvm use หรือลบโค้ดส่วนนี้ทิ้งไปก็ได้ครับเพราะปกติเราก็ไม่ได้อัพเดท NodeJS กันทุกวันอยู่แล้ว อ่านเพิ่มเติม

ในกรณีที่เราบู๊ตเครื่องใหม่ แต่มันยังขึ้น node เวอร์ชั่นเก่า ให้ใช้คำสั่ง

nvm alias default 14.17.0

โดยสมมุติว่า node LTS เวอร์ชั่นล่าสุดคือ v14.17.0 อ่านเพิ่มเติม

ข้อสังเกต: คำสั่ง

nvm alias default node

มันจะดึง node เวอร์ชั่นล่าสุดมาเป็น default ซึ่งเวอร์ชั่นล่าสุดจะใหม่กว่า LTS

สร้างไฟล์ updateNVM.sh

อีกวิธีหนึ่งคือแยกไฟล์ออกมาจาก .zshrc เพื่อไม่ให้ภาระตกอยู่กับไฟล์ใดไฟล์หนึ่งมากเกินไป โดยผมจะใช้บริการของ crontab บน Mac

เขียน crontab

ผมต้องการให้ crontab ทำงานทุกวันที่ 1 ของเดือน ณ เวลา 14.20 น. ผมจะเขียน crontab -e ดังนี้

20 14 1 * * /bin/zsh ~/Documents/CustomScripts/updateNVM.sh

ดูคำแปลได้จาก crontab.guru

crontab guru
crontab.guru

เขียนไฟล์ zsh script

ท่านสามารถเขียนโค้ด zsh script ไว้ที่ไหนก็ได้ครับ สำหรับกรณีของผม ผมทำงานบนเครื่อง Mac ผมจะสร้าง

  • ไฟล์ชื่อ updateNVM.sh
  • และจะเก็บไว้ที่ “/home/<user-name>/Document/CustomScripts/”
  • เมื่อสร้างไฟล์ updateNVM.sh เสร็จ ผมจะเปิดไฟล์นี้ด้วย VSCode

คำสั่งทั้งหมดเขียนได้ดังนี้

cd ~/Documents/ && mkdir CustomScripts && cd $_
touch updateNVM.sh && code $_

คัดลอกโค้ดไปวางไว้ที่ไฟล์ updateNVM.sh

#!/bin/zsh
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
cd ~
# Load nvm or initiate nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

nvm --version
nvm install 'lts/*' --reinstall-packages-from=current --latest-npm
# nvm install-latest-npm
nvm alias default 'lts/*'

# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
    echo "${nvmrc_node_version}"

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install --lts
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi

  echo "${node_version}"
  echo "${nvmrc_path}"
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

เสร็จแล้วครับ ท่านสามารถเชื่อมต่อ crontab -e กับ cronitor.io เพื่อให้มันแสดงผลการทำงานบนเว็บ ดูวิธีการได้จาก Developer Playground: Crontab Mac

เอกสารอ้างอิง

บทความที่เกี่ยวข้อง

สมัครรับบทความ

ท่านจะได้รับบทความเกี่ยวกับเทคนิคในการเขียนโค้ด การสร้างเว็บไซต์ ความรู้ด้านบัญชี ภาษีอากร และอื่นๆ

0 0 votes
ให้คะแนนบทความ
Notify of
guest
0 ความเห็นทั้งหมด
Inline Feedbacks
ดูความเห็นทั้งหมด

บทความแนะนำ

Flask Python framework โดย สรุป

Flask Python framework + Emmet

สรุป วิธีสร้างเว็บไซต์ด้วยภาษา Python โดยใช้ Flask framework และ การตั้งค่า VSCode เพื่อให้สามารถใช้ Emmet ร่วมกับ Flask framework ได้

Redis บน Debian AWS EC2

Redis บน Debian AWS EC2

ติดตั้ง Redis แบบ Manual บน ระบบปฏิบัติการ Debian ที่อยู่บน EC2 ของ AWS Cloud จะช่วยให้การปรับแต่ง Redis เช่น การเพิ่มพอร์ต ทำได้ง่ายขึ้น

Colorize VIM

Developer Playground: Colorize VIM

ตกแต่ง VIM Editor ให้ดู Colorize ด้วย VIM Plug และมันยังมีประโยชน์ต่อการเขียนโค้ดด้วย เพราะมันจะแสดงข้อมูลที่สำคัญบริเวณขอบล่างของหน้าจอ

0
แสดงความเห็นได้นะx
()
x
Scroll to Top
Share on facebook
Share on twitter
Share on linkedin