Tìm hiểu Node Package Manager (NPM) là gì trong Node.js

Node Package Manager (trình quản lý gói nút – NPM) cung cấp hai chức năng chính –

  • Các kho lưu trữ trực tuyến cho các package/mô-đun node.js có thể tìm kiếm trên search.nodejs.org
  • Tiện ích dòng lệnh để cài đặt các package Node.js, quản lý phiên bản và quản lý phụ thuộc các package 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, hãy mở console và gõ lệnh sau và xem kết quả –

$ npm --version
2.7.1

Nếu bạn đang chạy một phiên bản NPM cũ thì việc cập nhật nó lên phiên bản mới nhất là 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 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 framework mô-đun web Node.js nổi tiếng có tên 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 Global và Local (toàn cầu và cục bộ)
Theo mặc định, NPM cài đặt bất kỳ phụ thuộc nào trong chế độ local (cục bộ). Ở đây chế độ cục bộ đề cập đến việc cài đặt package trong thư mục node_modules nằm trong thư mục có ứng dụng Node. Các package được triển khai cục bộ có thể truy cập thông qua phương thức request (). Ví dụ, khi chúng ta 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 lệnh npm ls để 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ụ 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ể nhập trực tiếp bằng cách sử dụng request () trong ứng dụng Node. Bây giờ hãy thử cài đặt mô-đun express bằng cách 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.

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 mô-đun được cài đặt trên toàn cầu –

$ npm ls -g

Sử dụng gói.json
pack.json có 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 package. Chúng ta hãy mở package.json của package 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!"

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

  • name – tên của package
  • version – phiên bản của package
  • description – mô tả của package
  • homepage – trang chủ của package
  • author – tác giả của package
  • contributors – tên của người đóng góp cho package
  • 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 package
  • repository – loại kho lưu trữ và URL của package
  • main – điểm chính của package
  • keywords – các từ khóa

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

$ npm uninstall express

Khi NPM gỡ cài đặt package, bạn có thể xác minh package đó bằng cách xem nội dung của /node_modules/ directory hoặc nhập lệnh sau –

$ npm ls

Cập nhật một mô-đun
Cập nhật package.json và thay đổi phiên bản của 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 package bằng NPM.

$ npm search express

Tạo một mô-đun
Tạo một mô-đun yêu cầu package.json được tạo. Hãy tạo package.json bằng NPM, sẽ tạo khung sườn 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ề mô-đun của bạn. Bạn có thể nhận trợ giúp từ tệp pack.json đã đề 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 lưu trữ NPM bằng địa chỉ email hợp lệ.

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) mcmohd@gmail.com

Bây giờ là 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ì nó sẽ được xuất bản trong kho lưu trữ và có thể truy cập để cài đặt bằng NPM như bất kỳ mô-đun Node.js nào khác.

 

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *