NodeJS – Hệ thống quản lý gói npm

4.2/5 - (51 votes)

Như trong bài hướng dẫn cài đặt, chúng ta đã biết npm là một phần mềm quản lý và phân phối gói dành cho Node, nếu bạn có sử dụng các hệ điều hành Linux thì npm giống mấy thứ như apt-get, rpm, yum, MacPorts...v.v vậy. Mục đích của npm là phân phối các gói Node trên mạng Internet cho tất cả người dùng chỉ với vài dòng lệnh, bạn có thể tìm các gói, tải về và cài đặt rất nhanh chóng.

Bản thân npm cũng là một gói của Node và được viết theo quy tắc chuẩn của CommonJS.

Định dạng của một gói

Gói npm là một thư mục trong đó chứa một file có tên là package.json, file này lưu các thông tin mô tả về gói. Các thông tin này được ghi theo định dạng chuẩn CommonJS Package 1.0. Nếu bạn muốn đi sâu vào tìm hiểu về file package.json của gói npm thì có thể gõ lệnh sau:

C:\Users\PhoCode>npm help json

Thông thường một file package.json có nội dung như sau:

{ 
    name: "packageName",         // tên gói
    version: "1.0",              // số phiên bản
    main: "mainModuleName",      // tên module chính
    modules: {                   // danh sách các module đi kèm
        "mod1" : "lib/mod1",     
        "mod2" : "lib/mod2"
    }
}

Đoạn code trên viết bằng định dạng JSON nên sẽ không có gì lạ nếu bạn đã từng làm việc với JavaScript.

Trong đó có 2 trường quan trọng là nameversion. Nếu bạn có ý định viết một gói và đăng lên hệ thống npm thì trước tiên bạn nên xem tên gói mà mình định đặt có bị trùng hay chưa bằng cách tìm trên http://search.npmjs.org hoặc dùng lệnh tìm kiếm sau:

C:\Users\PhoCode>npm search <tên gói>

Tên module chính trong trường main chỉ định module sẽ được chạy đầu tiên khi chúng ta gọi hàm require('packageName'). Một gói cũng có thể chứa nhiều module khác và được liệt kê trong trường modules.

Một gói cũng có thể sử dụng các gói khác, các gói này được ghi trong trường dependencies, ví dụ:

"dependencies" : {
    "foo" : "1.0.0 - 2.x.x",
    "bar" : ">=1.0.2 < 2.1.2"
}

Ngoài ra còn có trường description (mô tả) và trường keyword (từ khóa) có tác dụng hỗ trợ người khác tìm gói của chúng ta trên hệ thống npm dễ dàng hơn. Trường homepage ghi địa chỉ website của người phát triển gói (hoặc bất cứ địa chỉ nào mà người đó muốn), trường author ghi thông tin của người phát triển, ví dụ:

"description" : "Package nay duoc phat trien boi Pho Code",
"homepage" : "https://phocode.com",
"author" : phocode7@gmail.com

Trường directories lưu danh sách thư mục của gói, ví dụ:

directories : { lib: './lib', bin: './bin' },

Trường scripts lưu danh sách các lệnh của gói, ví dụ install, activate, uninstall, update... Ví dụ chúng ta xem danh sách các lệnh của gói npm bằng lệnh sau:

C:\Users\PhoCode>npm help scripts

Lệnh trên sẽ mở website tài liệu của gói npm.

Tìm một gói

Mặc định khi cài thì các gói sẽ được tải về từ địa chỉ http://npmjs.org. Để cài thì bạn chỉ cần gõ lệnh:

C:\Users\PhoCode>npm install <tên gói>

Nếu bạn không biết tên gói thì có thể tìm trên 2 website là http://npmjs.org hoặc http://search.npmjs.org.

Ngoài ra bạn có thể dùng lệnh search của npm để tìm nữa, ví dụ giả sử chúng ta tìm các gói có liên quan đến từ khóa mp3 thì gõ lệnh sau:

C:\Users\PhoCode>npm search mp3
mediatags Tools extracting for media meta-data tags =coolaj16 uttil m4a aac mp3 id3 jpeg exiv xmp
node3p    An Amazon MP3 downloader for NodeJS       =ncb000gt

Chúng ta tìm được 2 gói là mediatags  và node3p, nếu muốn cài mediatags thì chỉ cần dùng lệnh install:

C:\Users\PhoCode>npm install mediatags

Sau khi cài gói nếu muốn xem tài liệu về gói đó thì chúng ta có thể dùng lệnh view:

C:\Users\PhoCode>npm view zombie

Một số lệnh trong npm

Tiếp theo chúng ta sẽ tìm hiểu một số lệnh như làm thế nào để tải gói về, sử dụng hoặc xóa một gói.

Xem hướng dẫn sử dụng

Lệnh help trong npm cho biết tất cả mọi thứ về gói/lệnh/module cụ thể, ví dụ:

C:\Users\PhoCode>npm help npm

Dòng trên sẽ mở website để xem hướng dẫn về gói npm.

Xem thông tin gói

Lệnh view sẽ in nội dung của file package.json, nếu nội dung quá dài thì chúng ta có thể yêu cầu chỉ hiển thị một trường cụ thể nào đó trong file này. Ví dụ:

C:\Users\PhoCode>npm view google-openid dependencies
{ express: '>= 0.0.1', openid: '>= 0.1.1 <= 0.1.1' }

Lệnh trên sẽ in nội dung trường dependencies trong file package.json của gói google-openid.

Cài một gói

Đơn giản là chỉ cần dùng lệnh npm install với tên gói là được:

C:\Users\PhoCode>npm install openid
openid@2.0.4 node_modules/openid
...

Lưu ý là các gói sẽ được tải về trong thư mục node_modules trong thư mục hiện tại của terminal, tức là đoạn lệnh trên sẽ tải gói openid về thư mục C:\Users\PhoCode\node_modules. Các gói được cài như vậy sẽ chỉ có thể đọc được từ các ứng dụng nằm cùng thư mục hoặc các ứng dụng nằm trong thư mục con.

Nếu muốn ứng dụng nào cũng có thể đọc được thì chúng ta cài gói đó vào thư mục cài đặt Node bằng cách thêm tùy chọn -g vào sau lệnh install:

C:\Users\PhoCode>npm install -g openid

Liệt kê các gói đã được cài đặt

Lệnh npm list sẽ liệt kê danh sách các gói đã được cài đặt trong thư mục hiện tại của terminal, danh sách được hiển thị theo dạng cây, bao gồm cả các module con có trong từng gói. Ví dụ:

C:\Users\PhoCode>npm list
├─┬ mediatags@0.1.0
│ ├─┬ futures@2.3.3
│ │ ├── asyncify@2.1.2
│ │ ├── chainify@2.1.2
│ │ ├── events.node@0.4.9
│ │ ├── forEachAsync@2.2.1
│ │ ├── future@2.3.1
│ │ ├── join@2.3.2
│ │ ├── loop@2.1.2
│ │ └── sequence@2.2.1
│ └─┬ walk@2.3.9
│ └── foreachasync@3.0.0
├─┬ openid@2.0.4
│ └─┬ request@2.74.0
│ ├── aws-sign2@0.6.0
│ ├── aws4@1.4.1
│ ├─┬ bl@1.1.2
│ │ └─┬ readable-stream@2.0.6
│ │ ├── core-util-is@1.0.2
│ │ ├── inherits@2.0.3
│ │ ├── isarray@1.0.0
│ │ ├── process-nextick-args@1.0.7
│ │ ├── string_decoder@0.10.31
│ │ └── util-deprecate@1.0.2
│ ├── caseless@0.11.0
│ ├─┬ combined-stream@1.0.5
...

Nếu không muốn xem theo dạng cây thì chúng ta có thể xem theo dạng đường dẫn thư mục bằng cách thiết lập tham số parseable như sau:

C:\Users\PhoCode>npm set parseable=true
C:\Users\PhoCode>npm list
C:\Users\PhoCode\node_modules\mediatags
C:\Users\PhoCode\node_modules\mediatags\node_modules\futures
C:\Users\PhoCode\node_modules\mediatags\node_modules\futures\node_modules\asyncify
C:\Users\PhoCode\node_modules\mediatags\node_modules\futures\node_modules\chainify
C:\Users\PhoCode\node_modules\mediatags\node_modules\futures\node_modules\events.node
C:\Users\PhoCode\node_modules\mediatags\node_modules\futures\node_modules\forEachAsync
C:\Users\PhoCode\node_modules\mediatags\node_modules\futures\node_modules\future
...

Cập nhật phiên bản mới cho các gói

Để xem danh sách các gói đã cũ (hay trên mạng đã có phiên bản mới) chúng ta dùng lệnh outdated:

C:\Users\PhoCode>npm outdated
less@1.3.3 node_modules/less current=1.3.1
gdata-js@2.0.1 node_modules/gdata-js current=0.0.4
consolidate@0.7.0 node_modules/consolidate current=0.5.0

Lệnh outdated hiển thị danh sách các gói đã cũ bao gồm số phiên bản đang cài và số phiên bản mới nhất. Để cập nhật một gói thì chúng ta dùng lệnh update, ví dụ:

C:\Users\PhoCode>npm update express
connect@1.4.1 ./node_modules/express/node_modules/connect
mime@1.2.2 ./node_modules/express/node_modules/mime
qs@0.1.0 ./node_modules/express/node_modules/qs
express@2.3.6 ./node_modules/express

Xóa một gói

Nếu bạn đang dùng thử một gói mà thấy nó “cùi bắp” quá thì có thể xóa đi bằng lệnh uninstall, ví dụ:

C:\Users\PhoCode>npm uninstall openid
unbuild openid@2.0.4
5 3 votes
Article Rating
Subscribe
Thông báo cho tôi qua email khi
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments