Cách sử dụng và thủ thuật đối với nvm - Node Version Manager

Cách sử dụng và thủ thuật đối với nvm - Node Version Manager

Threads
  • Có bạn nào trong lúc code mà bị "ngẫn tò te" hoặc "lú lẫn" trong mớ hỗn độn của mình viết ra chưa. Những lúc như thế tôi thường hay ngừng lại, thư giãn đầu óc, hoặc để mai tính tiếp. Ấy vậy mà rất hiệu quả nhé! Lúc sau xem lại cái tự nhiên thấy vấn đề ở đâu ngay.

    Hoặc cũng có thể thử áp dụng phương pháp "chú vịt vàng" - thử giải thích vấn đề đang gặp phải với vịt xem, nó sẽ cho thấy mâu thuẫn trong lời nói ra.

    Còn không có tiền mua vịt to thì xe túi mù ra vịt bé giống mình nè 😅

    » Xem thêm
  • Ơ buồn cười thật. Ai cũng biết GIF là định dạng ảnh động thường được dùng thay cho video clip để hiển thị các nội dung ngắn trên nền tảng web. GIF tiện hơn các nội dung dạng video là vì nó được hiển thị như một bức ảnh và được hỗ trợ rộng rãi. Cơ mà GIF có dung lượng nặng quá.

    Nói thật nhiều lúc mình có vài cái hành động muốn hiển thị lên web cho mọi người xem, cơ mà định dạng GIF nó nặng với cả cũng không biết cách tối ưu cho nhẹ xuống. Hôm nay lên mạng tìm hiểu xem định dạng nào có khả năng thay thế GIF trong tương lai thì mọi người biết đó là gì không? Là WEBP (webp)!!! Đúng vậy, là định dạng ảnh mà mình đang dùng trên blog lâu nay luôn á, mà giờ mới biết là nó hiển thị được cả ảnh động nữa, hơi quê 😆

    Kết hợp với ffmpeg nữa là chuyển được tất tần tật video clip thành webp được ngay. Để vài nửa ngồi chế lại cái cli một tí là dùng ngon luôn mọi người ạ 🤪

    » Xem thêm
  • Cảm giác như Github Copilot đang cố gắng mở rộng thị trường cho anh em developer á. Mới trước họ ra mắt Github Open Copilot Chat thì mới đây lại thêm cái Using GitHub Copilot in the command line dùng để giải thích hoặc gợi ý lệnh trong terminal.

    Đây, cách dùng rất đơn giản thôi, ví dụ muốn nó giải thích câu lệnh sudo apt-get để làm gì, thì:

    $ gh copilot explain "sudo apt-get"

    Hoặc nhờ nó gợi ý lệnh mong muốn, sử dụng tiếng Việt được luôn nhé (kể cả tiếng Việt không dấu vẫn hiểu 😳)

    $ gh copilot suggest "xoá commit chưa push"

    Mình đã kiểm tra và thấy lệnh ra rất đúng, xịn thật 🤓

    » Xem thêm

Vấn đề

Điều khiến bạn cảm thấy "sợ hãi" khi làm việc với Node.js là gì? Đối với tôi, chắc đó là maintain một mã nguồn Node.js/JavaScript đời đầu, hay có nghĩa là một dự án đã được viết từ rất lâu trước đó, đang sử dụng một phiên bản Node rất thấp mới có thể chạy được.

Không có gì khó hiểu khi tôi hay thậm chí nhiều bạn đọc cũng có cảm giác tương tự. Có rất nhiều lý do để đưa ra như cú pháp lỗi thời, tổ chức mã không trật tự, thư viện bị ngừng hỗ trợ hoặc thậm chí là không còn tài liệu nữa... thử nghĩ mà xem, một thư viện mà ta chưa từng dùng trước đó bỗng nhiên không còn dấu vết của tài liệu nữa thì biết dựa vào đâu mà viết tiếp đây? Chưa kể khi gặp vấn đề trên một thư viện đã "archive" thì đúng là không còn ai để mà hỏi nữa.

Nhưng cuộc sống mà, chúng ta không thể nào lảng tránh mãi được, bảo trì thì vẫn cứ phải bảo trì, khổ một nỗi máy tôi đang sử dụng phiên bản Node 18 "hiện đại", mà lại phải chạy một con "app" yêu cầu Node < 8 thì phải làm sao? Gỡ ra, cài lại rồi lại gỡ ra, cài lại... cứ thế khi muốn sử dụng một phiên bản khác? Đùa chứ tất nhiên là không cần phải làm như vậy rồi. Tôi cá là nhiều người đã biết đến công cụ nvm - Node Version Manager giúp dễ dàng chuyển qua lại các phiên bản Node khác nhau chỉ với một vài lệnh đơn giản.

Thật ra không chỉ có nvm mới làm được việc này, có nhiều công cụ giúp chúng ta quản lý phiên bản của Node như fnm hay asdf. Nhưng tùy vào sở thích của mỗi người mà họ tự chọn cho mình được cái thích hợp nhất. Ví dụ như tôi đang sử dụng nvm, và vì thế, ngày hôm nay, tôi xin phép chia sẻ một vài cách cũng như thủ thuật sử dụng nó.

NVM là gì?

NVM (Node Version Manager) là một công cụ giúp quản lý các phiên bản của Node.js trên máy tính của bạn. Nó cho phép bạn dễ dàng cài đặt, chuyển đổi và quản lý các phiên bản khác nhau của Node.js trên cùng một hệ thống. Điều này rất hữu ích khi bạn làm việc trên các dự án khác nhau yêu cầu các phiên bản Node.js khác nhau.

Cài đặt nvm rất đơn giản, nó hỗ trợ cả 3 nền tảng Mac, Linux và Windows. Ví dụ tôi đang dùng Mac và sử dụng luôn công cụ brew để cài đặt:

$ brew install nvm

Cũng cần lưu ý, phải thêm hai dòng cấu hình này vào ~/.profile hoặc ~/.zshrc nếu đang sử dụng zsh:

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

Hoặc nếu bạn dùng Linux:

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash

Còn Windows? Hơi khác một chút, chúng ta cần tải và cài đặt tại nvm-windows.

Cách sử dụng và thủ thuật

Tư tưởng sử dụng nvm cũng rất đơn giản, "install version -> switch version -> run".

# tải về version 18
$ nvm install 18

# xem danh sách version đã cài
$ nvm ls
       v16.18.1
->     v18.17.1

# chọn phiên bản 16
$ nvm use 16

# chạy
$ node index.js

Ngay sau khi chọn phiên bản 16, phiên Terminal này được áp dụng cho Node 16, bạn có thể start các ứng dụng Node/JavaScript với phiên bản đã chọn.

Khi kết thúc phiên, chẳng hạn như tắt Terminal, lúc này Node sẽ trở về phiên bản mặc định, nếu muốn sử dụng lại Node 16, chúng ta cần gõ lại lệnh nvm use 16. Điều đó khá bất tiện và mất thời gian, để xem nvm đang sử dụng phiên bản nào là mặc định:

$ nvm alias default
default -> 18 (-> v18.17.1)

Như trên nó đang chọn 18 làm mặc định, nếu muốn chuyển sang 16, gõ:

$ nvm alias default 16
$ nvm alias default
default -> 16 (-> v16.18.1)

Tuy vậy, tôi đang có cỡ chục dự án, và mỗi dự án yêu cầu một phiên bản Node khác nhau, vậy sao mà tôi có thể nhớ chính xác hay chí ít là thông báo cho người khác biết nữa? Rất đơn giản, hãy tạo một tệp .nvmrc ngay trong thư mục gốc của dự án. Ví dụ:

$ echo "16" > .nvmrc

Lệnh trên tạo một file .nvmrc chứa con số 16. .nvmrc như một file cấu hình của nvm để cho mọi người biết phiên bản Node khuyến khích sử dụng trong dự án này là bao nhiêu. Sau đó chỉ cần gõ:

$ nvm use

Ngay lập tức nvm sẽ chuyển sang 16.

Chà, cũng thú vị đấy nhưng thế thì lại mất công gõ lệnh use mỗi khi mở dự án ra à? Àh...Ừm... dĩ nhiên là có cách để không phải gõ thủ công rồi. Chúng ta sẽ thêm một lệnh tự động phát hiện và sử dụng use một cách tự động.

Ví dụ, tôi đang dùng zsh, mở file ~/.zshrc ra và thêm vào dòng này xuống cuối cùng:

$ vi ~/.zshrc
autoload -U add-zsh-hook

load-nvmrc() {
  local nvmrc_path
  nvmrc_path="$(nvm_find_nvmrc)"

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

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
      nvm use
    fi
  elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}

add-zsh-hook chpwd load-nvmrc
load-nvmrc

Lưu lại và cập nhật cấu hình:

$ source ~/.zshrc

Nếu bạn đọc không sử dụng zsh, có thể tham khảo thêm các cách khác tại Deeper Shell Integration.

Bây giờ hãy thử tắt đi mở lại VSCode và bật Terminal in-app lên xem Node đã tự động chuyển sang phiên bản cài đặt trong .nvmrc chưa.

Cuối cùng là một lưu ý về việc debug, nếu như bạn đã quen với phương pháp debug bằng break point. Có thể Text Editor hoặc IDE không biết được phiên bản Node mà bạn đang muốn sử dụng để chạy debug là bao nhiêu. Tùy vào công cụ mà bạn sử dụng có thể sẽ có cách cấu hình phiên bản Node ở đâu đó, nhưng với VSCode thì hiện tại tôi không thấy có. Vì thế, đơn giản nhất là thiết lập phiên bản mặc định cho Node bằng lệnh alias, tắt đi bật lại VSCode là được.

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.
Author

Xin chào, tôi tên là Hoài - một anh Dev kể chuyện bằng cách viết ✍️ và làm sản phẩm 🚀. Với nhiều năm kinh nghiệm lập trình, tôi đã đóng góp một phần công sức cho nhiều sản phẩm mang lại giá trị cho người dùng tại nơi đang làm việc, cũng như cho chính bản thân. Sở thích của tôi là đọc, viết, nghiên cứu... Tôi tạo ra trang Blog này với sứ mệnh mang đến những bài viết chất lượng cho độc giả của 2coffee.dev.Hãy theo dõi tôi qua các kênh LinkedIn, Facebook, Instagram, Telegram.

Bạn thấy bài viết này có ích?
Không

Bình luận (0)

Nội dung bình luận...