Node.js - NPM

Node Package Manager (NPM) cung cấp hai chức năng chính:

  • Kho lưu trữ trực tuyến cho các gói / mô-đun 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ảng đ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 nó 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
[email protected] /usr/lib/node_modules/npm

Cài đặt Mô-đun bằng NPM

Có một cú pháp đơn giản để cài đặt bất kỳ mô-đun Node.js nào -

$ npm install <Module Name>

Ví dụ: sau đây là lệnh cài đặt mô-đun khung công tác web Node.js nổi tiếng được gọi là express -

$ npm install express

Bây giờ bạn có thể sử dụng mô-đun này trong tệp js của mình như sau:

var express = require('express');

Cài đặt toàn cầu so với cục bộ

Theo mặc định, NPM cài đặt bất kỳ phần phụ thuộc nào trong chế độ cục bộ. Ở đây chế độ cục bộ đề cập đến cài đặt gói trong thư mục node_modules nằm trong thư mục có ứ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 request (). Ví dụ, khi chúng tôi cài đặt mô-đun express, nó đã tạo thư mục node_modules trong thư mục hiện tại nơi nó đã cài đặt mô-đun 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 npm ls lệnh liệt kê tất cả các mô-đun đượ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ần phụ thuộc như vậy có thể được sử dụng trong hàm 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 request () trong ứng dụng Node. Bây giờ chúng ta hãy thử cài đặt mô-đun express bằng cách sử dụng cài đặt toàn cầu.

$ npm install express -g

Điều này sẽ tạo ra một kết quả tương tự nhưng mô-đun sẽ được cài đặt trên toàn cầu. Ở đây, dòng đầu tiên hiển thị phiên bản mô-đun và vị trí nơi nó được cài đặt.

[email protected] /usr/lib/node_modules/express
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
└── [email protected] ([email protected], [email protected])

Bạn có thể sử dụng lệnh sau để kiểm tra tất cả các mô-đun được cài đặt trên toàn cầu -

$ npm ls -g

Sử dụng package.json

package.json hiện diện trong thư mục gốc của bất kỳ ứng dụng / mô-đun Node nào và được sử dụng để xác định các thuộc tính của một gói. Hãy mở package.json của gói express có trongnode_modules/express/

{
   "name": "express",
      "description": "Fast, unopinionated, minimalist web framework",
      "version": "4.11.2",
      "author": {
      
         "name": "TJ Holowaychuk",
         "email": "[email protected]"
      },
   
   "contributors": [{
      "name": "Aaron Heckmann",
      "email": "[email protected]"
   }, 
   
   {
      "name": "Ciaran Jessup",
      "email": "[email protected]"
   },
   
   {
      "name": "Douglas Christopher Wilson",
      "email": "[email protected]"
   },
   
   {
      "name": "Guillermo Rauch",
      "email": "[email protected]"
   },
   
   {
      "name": "Jonathan Ong",
      "email": "[email protected]"
   },
   
   {
      "name": "Roman Shtylman",
      "email": "[email protected]"
   },
   
   {
      "name": "Young Jae Sim",
      "email": "[email protected]"
   } ],
   
   "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": "[email protected]",
   "_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
   "_from": "express@*",
   "_npmVersion": "1.4.28",
   "_npmUser": {
      "name": "dougwilson",
      "email": "[email protected]"
   },
   
   "maintainers": [{
      "name": "tjholowaychuk",
      "email": "[email protected]"
   },
   
   {
      "name": "jongleberry",
      "email": "[email protected]"
   },
   
   {
      "name": "shtylman",
      "email": "[email protected]"
   },
   
   {
      "name": "dougwilson",
      "email": "[email protected]"
   },
   
   {
      "name": "aredridel",
      "email": "[email protected]"
   },
   
   {
      "name": "strongloop",
      "email": "[email protected]"
   },
   
   {
      "name": "rfeng",
      "email": "[email protected]"
   }],
   
   "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!"
}

Các thuộc tính của Package.json

  • name - tên của gói

  • version - phiên bản của gói

  • description - mô tả của gói

  • homepage - trang chủ của gói

  • author - tác giả của gói

  • contributors - tên của những người đóng góp cho gói

  • dependencies- danh sách các 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.

  • repository - loại kho lưu trữ và URL của gói

  • main - điểm vào của gói

  • keywords - từ khóa

Gỡ cài đặt một mô-đun

Sử dụng lệnh sau để gỡ cài đặt mô-đun Node.js.

$ npm uninstall express

Sau 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 nhập lệnh sau:

$ npm ls

Cập nhật Mô-đun

Cập nhật package.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 Mô-đun

Tìm kiếm tên gói bằng NPM.

$ npm search express

Tạo một mô-đun

Tạo mô-đun yêu cầu phải tạo package.json. Hãy tạo package.json bằng cách sử dụng NPM, nó sẽ tạo ra 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ả thông tin cần thiết về mô-đun của mình. Bạn có thể nhận trợ giúp từ tệp package.json được đề cập ở trên để hiểu ý nghĩa của các thông tin khác nhau được yêu cầu. Sau khi package.json được tạo, hãy sử dụng lệnh sau để tự đăng ký với trang web của kho lưu trữ NPM bằng địa chỉ email hợp lệ.

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) [email protected]

Đã đến lúc xuất bản mô-đun của bạn -

$ npm publish

Nếu mọi thứ đều ổn với mô-đun của bạn, thì mô-đun đó 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ỳ mô-đun Node.js nào khác.