Trình quản lý gói nodejs (NPM) cung cấp hai chức năng chính –
- Kho lưu trữ trực tuyến cho các gói/modules node.js có thể tìm kiếm được trên search.nodejs.org
- Tiện ích dòng lệnh để cài đặt các gói Node.js, quản lý phiên bản và quản lý phụ thuộc của các gói Node.js.
NPM đi kèm với các bản cài đặt Node.js sau phiên bản v0.6.3. Để xác minh điều tương tự, hãy mở bàn điều khiển và gõ lệnh sau và xem kết quả –
$ npm --version 2.7.1
Nếu bạn đang chạy phiên bản NPM cũ thì việc cập nhật lên phiên bản mới nhất khá dễ dàng. Chỉ cần sử dụng lệnh sau từ root –
$ sudo npm install npm -g /usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js npm@2.7.1 /usr/lib/node_modules/npm
Cài đặt các Modules bằng NPM
Có một cú pháp đơn giản để cài đặt bất kỳ modules Node.js nào –
$ npm install <Module Name>
Ví dụ: sau đây là lệnh cài đặt Modules khung web Node.js nổi tiếng có tên express –
$ npm install express
Bây giờ bạn có thể sử dụng Modules này trong tệp js của mình như sau –
var express = require('express');
Cài đặt toàn cầu và cục bộ
Theo mặc định, NPM cài đặt bất kỳ phụ thuộc nào ở chế độ cục bộ. Ở đây, chế độ cục bộ đề cập đến việc cài đặt gói trong thư mục node_modules nằm trong thư mục chứa ứng dụng Node. Các gói được triển khai cục bộ có thể truy cập được thông qua phương thức require(). Ví dụ: khi chúng tôi cài đặt modules express, nó đã tạo thư mục node_modules trong thư mục hiện tại nơi nó đã cài đặt modules express.
$ ls -l total 0 drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules
Ngoài ra, bạn có thể sử dụng lệnh npm ls để liệt kê tất cả các modules được cài đặt cục bộ.
Các gói/phụ thuộc được cài đặt toàn cầu được lưu trữ trong thư mục hệ thống. Các phụ thuộc như vậy có thể được sử dụng trong chức năng CLI (Giao diện dòng lệnh) của bất kỳ node.js nào nhưng không thể được nhập trực tiếp bằng cách sử dụng yêu cầu () trong ứng dụng Node. Bây giờ, hãy thử cài đặt modules express bằng cài đặt chung.
$ npm install express -g
Điều này sẽ tạo ra một kết quả tương tự nhưng modules sẽ được cài đặt trên toàn cầu. Ở đây, dòng đầu tiên hiển thị phiên bản modules và vị trí cài đặt modules .
express@4.12.2 /usr/lib/node_modules/express ├── merge-descriptors@1.0.0 ├── utils-merge@1.0.0 ├── cookie-signature@1.0.6 ├── methods@1.1.1 ├── fresh@0.2.4 ├── cookie@0.1.2 ├── escape-html@1.0.1 ├── range-parser@1.0.2 ├── content-type@1.0.1 ├── finalhandler@0.3.3 ├── vary@1.0.0 ├── parseurl@1.3.0 ├── content-disposition@0.5.0 ├── path-to-regexp@0.1.3 ├── depd@1.0.0 ├── qs@2.3.3 ├── on-finished@2.2.0 (ee-first@1.1.0) ├── etag@1.5.1 (crc@3.2.1) ├── debug@2.1.3 (ms@0.7.0) ├── proxy-addr@1.0.7 (forwarded@0.1.0, ipaddr.js@0.1.9) ├── send@0.12.1 (destroy@1.0.3, ms@0.7.0, mime@1.3.4) ├── serve-static@1.9.2 (send@0.12.2) ├── accepts@1.2.5 (negotiator@0.5.1, mime-types@2.0.10) └── type-is@1.6.1 (media-typer@0.3.0, mime-types@2.0.10)
Bạn có thể sử dụng lệnh sau để kiểm tra tất cả các modules được cài đặt trên toàn cầu –
$ npm ls -g
Sử dụng gói.json
package.json có trong thư mục gốc của bất kỳ ứng dụng/modules Node nào và được sử dụng để xác định các thuộc tính của gói. Hãy mở package.json của gói express có trong node_modules/express/
{ "name": "express", "description": "Fast, unopinionated, minimalist web framework", "version": "4.11.2", "author": { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" }, "contributors": [{ "name": "Aaron Heckmann", "email": "aaron.heckmann+github@gmail.com" }, { "name": "Ciaran Jessup", "email": "ciaranj@gmail.com" }, { "name": "Douglas Christopher Wilson", "email": "doug@somethingdoug.com" }, { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }, { "name": "Jonathan Ong", "email": "me@jongleberry.com" }, { "name": "Roman Shtylman", "email": "shtylman+expressjs@gmail.com" }, { "name": "Young Jae Sim", "email": "hanul@hanul.me" } ], "license": "MIT", "repository": { "type": "git", "url": "https://github.com/strongloop/express" }, "homepage": "https://expressjs.com/", "keywords": [ "express", "framework", "sinatra", "web", "rest", "restful", "router", "app", "api" ], "dependencies": { "accepts": "~1.2.3", "content-disposition": "0.5.0", "cookie-signature": "1.0.5", "debug": "~2.1.1", "depd": "~1.0.0", "escape-html": "1.0.1", "etag": "~1.5.1", "finalhandler": "0.3.3", "fresh": "0.2.4", "media-typer": "0.3.0", "methods": "~1.1.1", "on-finished": "~2.2.0", "parseurl": "~1.3.0", "path-to-regexp": "0.1.3", "proxy-addr": "~1.0.6", "qs": "2.3.3", "range-parser": "~1.0.2", "send": "0.11.1", "serve-static": "~1.8.1", "type-is": "~1.5.6", "vary": "~1.0.0", "cookie": "0.1.2", "merge-descriptors": "0.0.2", "utils-merge": "1.0.0" }, "devDependencies": { "after": "0.8.1", "ejs": "2.1.4", "istanbul": "0.3.5", "marked": "0.3.3", "mocha": "~2.1.0", "should": "~4.6.2", "supertest": "~0.15.0", "hjs": "~0.0.6", "body-parser": "~1.11.0", "connect-redis": "~2.2.0", "cookie-parser": "~1.3.3", "express-session": "~1.10.2", "jade": "~1.9.1", "method-override": "~2.3.1", "morgan": "~1.5.1", "multiparty": "~4.1.1", "vhost": "~3.0.0" }, "engines": { "node": ">= 0.10.0" }, "files": [ "LICENSE", "History.md", "Readme.md", "index.js", "lib/" ], "scripts": { "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/" }, "gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada", "bugs": { "url": "https://github.com/strongloop/express/issues" }, "_id": "express@4.11.2", "_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148", "_from": "express@*", "_npmVersion": "1.4.28", "_npmUser": { "name": "dougwilson", "email": "doug@somethingdoug.com" }, "maintainers": [{ "name": "tjholowaychuk", "email": "tj@vision-media.ca" }, { "name": "jongleberry", "email": "jonathanrichardong@gmail.com" }, { "name": "shtylman", "email": "shtylman@gmail.com" }, { "name": "dougwilson", "email": "doug@somethingdoug.com" }, { "name": "aredridel", "email": "aredridel@nbtsc.org" }, { "name": "strongloop", "email": "callback@strongloop.com" }, { "name": "rfeng", "email": "enjoyjava@gmail.com" }], "dist": { "shasum": "8df3d5a9ac848585f00a0777601823faecd3b148", "tarball": "https://registry.npmjs.org/express/-/express-4.11.2.tgz" }, "directories": {}, "_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz", "readme": "ERROR: No README data found!" }
Thuộc tính của Package.json
- tên – tên của gói
- phiên bản – phiên bản của gói
- mô tả – mô tả của gói
- trang chủ – trang chủ của gói
- tác giả – tác giả của gói
- cộng tác viên – tên của những người đóng góp cho gói
- phụ thuộc – danh sách phụ thuộc. NPM tự động cài đặt tất cả các phụ thuộc được đề cập ở đây trong thư mục node_module của gói.
- kho lưu trữ – loại kho lưu trữ và URL của gói
- chính – điểm vào của gói
- từ khóa – từ khóa
Gỡ cài đặt một Modules
Sử dụng lệnh sau để gỡ cài đặt Modules Node.js.
$ npm uninstall express
Khi NPM gỡ cài đặt gói, bạn có thể xác minh nó bằng cách xem nội dung của thư mục /node_modules/ hoặc gõ lệnh sau –
$ npm ls
Cập nhật một Modules
Cập nhật pack.json và thay đổi phiên bản của phần phụ thuộc sẽ được cập nhật và chạy lệnh sau.
$ npm update express
Tìm kiếm một Modules
Tìm kiếm tên gói bằng NPM.
$ npm search express
Tạo một Modules
Việc tạo một Modules yêu cầu tạo gói.json. Hãy tạo package.json bằng cách sử dụng NPM, sẽ tạo khung cơ bản của package.json.
$ npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sane defaults. See 'npm help json' for definitive documentation on these fields and exactly what they do. Use 'npm install <pkg> --save' afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (webmaster)
Bạn sẽ cần cung cấp tất cả các thông tin cần thiết về Modules của mình. Bạn có thể nhận trợ giúp từ tệp pack.json nêu trên để hiểu ý nghĩa của các thông tin khác nhau được yêu cầu. Khi package.json được tạo, hãy sử dụng lệnh sau để tự đăng ký với trang web kho lưu trữ NPM bằng địa chỉ email hợp lệ.
$ npm adduser Username: mcmohd Password: Email: (this IS public) mcmohd@gmail.com
Đã đến lúc xuất bản Modules của bạn –
$ npm publish
Nếu mọi thứ đều ổn với modules của bạn, thì modules đó sẽ được xuất bản trong kho lưu trữ và có thể truy cập để cài đặt bằng NPM giống như bất kỳ modules Node.js nào khác.