NPM đại cương - Tôi đã đẩy package lên npm như thế nào?

NPM đại cương - Tôi đã đẩy package lên npm như thế nào?

Bài viết trong chủ đề này:
  1. NPM đại cương - Tôi đã đẩy package lên npm như thế nào?
  2. NPM đại cương - Xây dựng và đẩy package lên npm
Tin ngắn hàng ngày dành cho bạn
  • Không hề kém cạnh, Google mới đây đã giới thiệu Gemini CLI - Một dạng AI Agent tương tự như Codex hay Claude Code.

    Điều đáng lưu ý là họ cho dùng miễn phí tới... 1000 truy vấn mỗi ngày. Nhiều đấy chứ. Ngoài ra họ cũng mã nguồn mở dự án này để đảm bảo tính minh bạch, học tập và nghiên cứu 🤓

    » Xem thêm
  • Lại có thêm một công cụ hỗ trợ tìm kiếm nhanh lịch sử gõ lệnh nè mọi người: atuinsh/atuin.

    Điều thú vị là nó dùng SQLite để lưu trữ. Ngoài ra còn cung cấp tính năng đồng bộ hóa (mã hóa) hoàn toàn lịch sử giữa các máy với nhau nữa. Hay ghê 🤓

    » Xem thêm
  • Mình thấy ấn tượng với mô hình gemma-3n-E4B của nhà Google ghê. Đây là một trong những mô hình hứa hẹn mang các mô hình ngôn ngữ lớn xuống chạy trên thiết bị di dộng hoặc web hoặc nhúng (embedded)...

    Cảm giác nó hiểu lời nhắc hơn á, tại vì mình thử nhiều mô hình ít tham số mà nó hay lơ đi lời nhắc của mình. Ví dụ bảo: "Chỉ trả về câu trả lời, không cần giải thích gì thêm" thì rất nhiều cái vẫn cứ phải chêm vào câu mở đầu, giải thích... còn với gemma-3n thì trả lời rất đúng trọng tâm.

    » Xem thêm

Vấn đề

Chắc hẳn mọi người ở đây ai cũng từng nghe, biết và sử dụng npm hằng ngày trong công việc. NPM là một kho lưu trữ packages khổng lồ mà chủ yếu là các thư viện javascript dùng cho lập trình web hay node.js.

Bản thân NPM chỉ là kho vậy thì các package từ đâu ra? Câu trả lời là từ cộng đồng, trong đó có thể có chính các bạn - những người hẳn đang có những ý tưởng thú vị và sẵn sàng chia sẻ.

Bản thân tôi sau rất nhiều lần dùng "chùa" các packages thì một biến cố lớn xảy đến, đó là tôi không thể tìm được một component nào nhập mã OTP cho vue.js cả (tại thời điểm lúc đó, còn bây giờ thì tôi cũng không rõ lắm :D). Thế là tôi đành phải tự viết, nhưng khoan thay vì dùng một mình thì tại sao tôi không đóng gói nó và chia sẻ lên mạng nhỉ? Lúc đó điều tôi nghĩ ngay đến là mạng "phân phối nội dung" NPM thần thánh.

Ý tưởng đến để xây dựng một package luôn xuất hiện ở mọi nơi, mặc dù bây giờ có hàng chục hoặc thậm chí hàng trăm package khác nhau nhưng cùng giải quyết cùng một vấn đề. Cạnh tranh với các package lâu đời có lượt download khổng lồ là khó. Tuy nhiên đóng góp một phần nhỏ bé cũng là đóng góp phải không mọi người? Điều bạn cần là tạo một package có độ tin cậy cao, phát hành đúng thời điểm cộng một chút may mắn.

Lựa chọn nền tảng cho packages

Các packages trên npm rất đa dạng, ví dụ có những package chỉ dành cho browser hoặc chỉ dành cho node.js, hay có cả những package hỗ trợ cả hai. Ngoài ra một package viết cho vue.js thì react.js không thể nào dùng được v.v...& v.v..

Vì thế ngay từ đầu bạn nên xác định sẽ viết package sử dụng cho nền tảng nào. Ví như như tôi đã chọn "package OTP INPUT cho vue.js".
Việc xây dựng một package sẽ dễ dàng hơn nếu như bạn tìm được "khung" phù hợp. Khung ở đây là một project được setup sẵn mọi thứ từ run build, run dev, run test... tất tần tật, việc của bạn chỉ là tập trung vào xử lý logic.
Hoặc nếu không tìm thấy hay không muốn dùng sẵn thì bạn có thể lựa chọn xây dựng từ đầu, đồng nghĩa với việc bạn phải setup tất cả mọi thứ. Dĩ nhiên là có thể lược bớt các thành phần như run dev, run test... nhưng như thế sẽ khiến package của bạn thiếu đi sự "chuyên nghiệp".

Một số khung phổ biết mà tôi biết:

Sau khi đã hoàn thành logic cho package, tôi sẽ cần phải tạo một file README.md trong đó mô tả cách sử dụng, các attributes v.v... đủ để cho mọi người hiểu. Ngoài ra còn chỉ cho họ cách để chạy dev, test... khi họ muốn contribute.
Bước cuối cùng là bước publish package lên npm.

Làm quen npm cli

CLI của npm giúp sẽ giúp tôi đẩy package lên repository. Mặc định khi cài node.js là sẽ có npm, vì thế ai chưa có thì cài node.js nhé!

Kiểm tra phiên bản npm:

$ npm -v
6.14.12

Đăng nhập vào npm:

$ npm login

Di chuyển đến thư mục chứa project cần publish, ví dụ ở đây tôi move đến thư mục vue-otp-2:

$ cd vue-otp-2

Đảm bảo rằng trong thư mục đó đã có file package.json. NPM sẽ dựa vào package.json để publish package của bạn, một file package.json cơ bản phải có name & version:

{
  "name": "vue-otp-2",  
  "version": "1.0.0",  
}

Trong đó name là tên package được dùng để install npm i vue-otp-2 còn version là phiên bản của package tại thời điểm publish.

Sau đó publish:

$ npm publish

Ngồi chờ cho đến khi publish thành công và bạn sẽ nhận được một email thông báo về việc này.

Một số lưu ý khi publish:

  • Hãy đảm bảo version package của bạn theo chuẩn semantic. Nếu chưa biết có thể xem thêm ở đây.

  • Hãy đảm bảo tên version của bạn là unique trên npm. Ví dụ bạn không thể đặt tên package là vue-opt-2 nữa đơn giản là tôi đã sở hữu cái tên đó rồi, còn nếu bạn vẫn muốn dùng cái tên đó thì npm cung cấp thêm một lựa chọn tên package nữa đại loại sẽ gắn thêm username của bạn vào tên: @hoaitx:vue-opt-2. Tham khảo cách thiết lập tại đây.

  • Ngoài name & version thì còn rất nhiều thông số thú vị để khiến cho profile package của bạn trông "ngầu" hơn. Tham khảo thêm tại đây.

Tips & tricks:

  • Một vài bạn publish thành công rồi nhưng lúc install vào project thì không sử dụng được thì rất có thể là chưa xác định đúng điểm nhập module trong package. Cụ thể package.json có một thuộc tính là main được dùng để xác định file nào sẽ được import vào khi gọi require/import mặc định là index.js. Ví dụ package có name là foo, khi gọi require("foo") thì nó tương ứng với đường dẫn là node_modules/foo/index.js.

  • Try on RunKit là một ứng dụng cho phép chúng ta dùng thử package trước khi quyết định có nên cài đặt hay không :D.

Tổng kết

Ở bài viết này tôi chỉ dừng lại ở mức tường thuật lại quá trình publish package của tôi lên npm. Ở bài viết sau tôi sẽ đi vào chi tiết từng bước tạo package.

À cho bạn nào thắc mắc từ đầu bài đến giờ chưa thấy link đến package của tôi thì nó đây https://www.npmjs.com/package/vue-otp-2.

Cao cấp
Hello

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

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.

Bình luận (0)

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