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?

Tin ngắn hàng ngày dành cho bạn
  • Trong đợt khảo sát chừng 1 năm trước, mình có hỏi mọi người là có sẵn sàng bỏ tiền ra để mua gói cao cấp không, thì có đến 35% số người trả lời chắc nịch là "Không", 65% còn lại nằm trong nhóm có khả năng sẽ mua.

    Nếu bạn thường xuyên ghé vào blog thì nhiều khả năng đã thấy bài viết mới nhất màu vàng ngay đầu trang chủ. Khi bấm vào nó hiện ra một nút yêu cầu mở khoá để đọc bài viết. Điều đó có ý nghĩa gì? Đúng vậy, mình đang chuẩn bị cho quá trình bán gói cao cấp.

    Thời điểm mình đăng bài viết đó cách đây gần 9 ngày. Theo thống kê, số lượng người bấm vào để đọc là 20 lượt. Nếu so sánh nó với bài viết có nhiều lượt xem nhất cùng thời điểm là 60, còn số lượng truy cập vào trang chủ là 122. Tức là cứ mỗi 6 lượt ra trang chủ thì có một lượt bấm vào bài viết cao cấp.

    Quyết định bán gói cao cấp không phải bộc phát, đó là cả một quá trình. Hơn nữa là sự quan tâm của bạn đọc, những người thường xuyên ghé thăm trang web. Các bạn là những người biết rõ nhất lợi ích mà trang web mang lại và đóng góp một phần công sức vào sự phát triển. Còn mình thì vẫn luôn luôn nỗ lực để mang lại trải nghiệm tốt nhất cho độc giả của 2coffee.dev.

    Tại sao lại bán gói cao cấp? Mà bán thì ai mua? Sao không cứ mãi mãi phát triển như bây giờ đi? Được rồi, đó là những câu hỏi mà tôi tin rằng bất kỳ ai đọc đến đây đều phải thắc mắc.

    Việc bán gói cao cấp đánh dấu một sự phát triển mới của 2coffee.dev, cả cho mình và cả cho độc giả. Tại sao? Nếu mình vẫn tiếp tục ở vòng lặp đọc - viết - rồi lại đọc - viết thì đó là một vòng an toàn, chẳng có sự đổi mới, thậm chí còn giới hạn óc sáng tạo. Một tính năng mới, tham gia vào một lĩnh vực mới giúp phá vỡ vòng lặp này và đưa bản thân vào những thách thức mới hơn. Nếu thất bại, đó là một bài học đáng giá. Ngược lại, đó là nguồn động lực to lớn mà tin rằng không chỉ dành riêng cho mình. Độc giả giờ đây sẽ có thêm lựa chọn mới, trải nghiệm mới mà trước nay chưa hề có.

    Mình không sợ thất bại, ngược lại dám nghĩ dám làm và bài học rút ra mới là điều đáng trân quý.

    » Xem thêm
  • openai/codex là một dự án mã nguồn mở mới nhất của OpenAI, ngay sau khi họ công bố hai mô hình mới nhất là o3 và o4 mini. Nghe nói cả o3 và o4 mini này rất thích hợp làm Agent nên tung ra codex như một dạng Agent nhỏ nhẹ chạy ngay trong Terminal luôn.

    Về tính ứng dụng, vì nó là Agent nên nó có thể đọc/thêm/sửa/xoá nội dung tệp của bạn luôn. Ví dụ.

    codex "explain this codebase to me"

    Hoặc tích hợp vào pipe line của CI/CD.

    - name: Update changelog via Codex run: | npm install -g @openai/codex export OPENAI_API_KEY="${{ secrets.OPENAI_KEY }}" codex -a auto-edit --quiet "update CHANGELOG for next release"

     À quên mất, phải dùng API của OpenAI nha 😆

    » Xem thêm
  • Có thể nhiều người chưa biết, OpenAI đã mở trang học viện riêng để giúp người dùng học tập và khai thác được tối đa sức mạnh các mô hình ngôn ngữ của họ.

    OpenAI Academy

    » 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

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào 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...