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à name
và version.
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