Home Tutorial Nodejs Node.js -Bài 2: Trình quản lý package NPM

Node.js -Bài 2: Trình quản lý package NPM

18 min read
0
213

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.

Load More Related Articles
Load More By quangvu
  • Node.js – Bài 13: API RESTful

    Kiến trúc REST là gì? REST là viết tắt của REpresentational State Transfer. REST là kiến ​…
  • Node.js – Bài 11: Web Module

    Kiến trúc ứng dụng web Một ứng dụng Web thường được chia thành bốn lớp – Client  − L…
  • Node.js – Bài 10: Global Objects

    Các đối tượng toàn cầu của Node.js có bản chất toàn cầu và chúng có sẵn trong tất cả các m…
Load More In Nodejs

Check Also

Tự làm web chatGPT đơn giản cho phép dùng nhiều OpenAI key

Trong thời đại công nghệ phát triển như hiện nay, chatbot đang dần trở thành một giải pháp…