MERN (4) - NPM và Module

Bài trước: MERN (3) - Làm quen với callback
-----

1.5       NPM và Module


1.5.1       NPM


NPM (viết tắt của Node Package Manager) là chương trình quản lý thư viện (package manager) ngầm định trong môi trường Nodejs. NPM được tích hợp sẵn trong gói cài đặt Nodejs, vì vậy khi cài đặt Nodejs là có luôn NPM.

NPM do Issac Z. Schlueter tạo ra năm 2010, viết bằng ngôn ngữ JavaScript. Facebook cũng tạo ra một chương trình có chức năng tương tự NPM có tên là Yarn. Ngôn ngữ Java cũng có chương trình tương tự có tên là Maven và Gradle.

Ví dụ, sau khi cài đặt Nodejs, trong cửa sổ dòng lệnh, gõ lệnh npm –v để xem phiên bản của NPM, nếu có hiển thị được phiên bản là đã cài đặt được NPM.

C:\Users\Maxsys>npm -v
6.4.1

NPM gồm hai thành phần quan trọng:

– Một là kho chứa các dự án, hay các gói (module, thư viện, framework) mã nguồn mở cho nền tảng Nodejs, lập trình viên có thể tải về, sử dụng để phát triển các dự án. Kho chứa được để trên Internet tại địa chỉ https://www.npmjs.com/

– Hai là chương trình chạy ở chế độ dòng lệnh (command line - npm) để tương tác với kho chứa (https://www.npmjs.com/), nhằm cài đặt các gói, quản lý phiên bản, quản lý các dependency.

Xem hình ảnh minh họa về NPM,



Ví dụ, viết chương trình đơn giản bằng JavaScript cho phép người dùng nhập vào tên của họ, sau đó xuất ra câu chào. Chương trình có sử dụng module (các hàm cung cấp sẵn để thực hiện một vài chức năng cụ thể, thư viện) có tên là readline-sync được lấy về từ kho https://www.npmjs.com/

Sau đây là các bước thực hiện:

– Tạo một thư mục cho chương trình, ví dụ: testnpm

– Mở chương trình dòng lệnh (cmd), di chuyển tới thư mục testnpm

– Gõ lệnh npm init để khởi tạo việc sử dụng các module ở bên ngoài, liên tục bấm Enter cho đến khi hoàn thành. Quá trình khởi tạo sẽ sinh ra tập tin package.json và các thông tin cấu hình bên trong tập tin này.

D:\Liv\TuHoc\IT\ChuyenNganh\CNPM\MERN\codes\testnpm>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (testnpm)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to D:\Liv\TuHoc\IT\ChuyenNganh\CNPM\MERN\codes\testnpm\package.json:

{
  "name""testnpm",
  "version""1.0.0",
  "description""",
  "main""index.js",
  "scripts"{
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author""",
  "license""ISC"
}
Is this OK? (yes)

– Để tải và cài đặt một module vào dự án, sử dụng lệnh npm install <ten module> --save. Ví dụ chúng ta sẽ tải và cài đặt module có tên readline-sync. Cần vào trang https://www.npmjs.com/, gõ tên module readline-sync để xem thông về nó (https://www.npmjs.com/package/readline-sync). Gõ lệnh npm install readline-sync --save

– Kết quả khi cài đặt thành công

D:\Liv\TuHoc\IT\ChuyenNganh\CNPM\MERN\codes\testnpm>npm install readline-sync --save
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN testnpm@1.0.0 No description
npm WARN testnpm@1.0.0 No repository field.

+ readline-sync@1.4.10
added 1 package from 1 contributor and audited 1 package in 6.017s
found 0 vulnerabilities

– Lệnh npm install readline-sync --save cũng sẽ tạo thư mục node_modules (nếu chưa có), tải module readline-sync từ Internet xuống thư mục node_modules, cập nhật thông tin tại mục dependencies trong tập tin package.json.

– Trong thư muc testnpm, tạo tập tin index.js, nhập vào đoạn mã sau:

// lệnh require dùng để tạo một tham chiếu tới thư viện cụ thể
var readlineSync = require('readline-sync');
// đợi người dùng nhập dữ liệu
var userName = readlineSync.question('Nhap ten cua ban: ');
console.log('Chao ' + userName + ' !');

– Thực thi tập tin index.js để xem kết quả.


1.5.2       Module trong Nodejs


Module là gì?

Module (tiếng Việt gọi là mô-đun) là các phần mã nguồn riêng biệt, được kết hợp với nhau để tạo ra các chương trình hoàn chỉnh. Khi lập trình có thể thực hiện theo cách mô-đun hóa, nghĩa là chia nhỏ chương trình lớn thành các thành phần nhỏ hơn để dễ viết, dễ kiểm soát và dễ tái sử dụng.

Ví dụ: readline-sync là một mô-đun để nhập dữ liệu vào từ bàn phím.

Lập trình JavaScript với Nodejs cũng áp dụng cách dùng các mô-đun để tạo ra một chương trình. Nó cũng giống như việc tạo ra các thư viện của các ngôn ngữ lập trình khác, sau đó gọi thư viện ra để dùng.

Có các loại Mô-đun nào?

Có ba loại mô-đun:

– Mô-đun được tích hợp sẵn trong Nodejs, ví dụ: http, path, readline

– Mô-đun do cộng đồng phát triền và chia sẻ trên kho chứa https://www.npmjs.com/

– Mô-đun do lập trình viên tự tạo ra trong mỗi dự án  

Require là gì?

Require nghĩa là "cần dùng đến…".

Trong chương trình JavaScript, sử dụng hàm require() để báo cho Nodejs biết là chương trình "cần dùng đến" một mô-đun nào đó. Hiểu nôm na là gọi thư viện.

Cú pháp sử dụng : require(‘mô-đunA’), Nodejs sẽ tìm ‘mô-đunA’ theo đường dẫn cung cấp hoặc tìm trong chính thư viện của Nodejs hoặc tìm trong thư mục node_modules.

Khi lập trình, mô-đun sẽ được gán vào một biến, thông qua biến này để gọi các hàm, tham chiếu tới các biến được định nghĩa trong mô-đun, ví dụ :

var readlineSync = require('readline-sync');

Sử dụng mô-đun tích hợp sẵn trong Nodejs

Ví dụ, dùng mô-đun http để tạo một một http server (webserver chạy giao thức http).

Các bước thực hiện:

– Tạo thư mục httpserver

– Trong thư mục httpserver, tạo tập tin server.js

– Viết đoạn mã sau vào tập tin server.js

// cần dùng đến mô-đun http
// khai báo biến http để tham chiếu tới mô-đun
var http = require('http');
// gọi hàm createServer để tạo http server
// tạo một hàm để trả lời khi có truy cập (request) từ client
// http server lắng nghe trên cổng 8080
http.createServer(function(req, res) {
  res.writeHead(200, { 'Content-Type': 'text/html' });
  res.end('Hello ong Teo!');
}).listen(8080);

Đọc thêm về hàm createServer tại đây:


– Mở chương trình dòng lệnh, gõ lệnh node server.js để thực thi chương trình, nghĩa là chạy một http server, sẵn sàng chờ các truy cập từ trình duyệt của người dùng.

D:\Liv\TuHoc\IT\ChuyenNganh\CNPM\MERN\codes\httpserver>node server.js
// không xuất thông báo gì là chạy thành công

– Mở trình duyệt web, nhập vào đường dẫn, để truy cập tới http server: http://localhost:8080/

– Trên trình duyệt sẽ xuất hiện dòng chữ “Hello ong Teo!”.

Sử dụng mô-đun do cộng đồng phát triển, chia sẻ trên kho chứa

Xem ví dụ chương trình sử dụng readline-sync đã trình bày ở phần trước.

Sử dụng mô-đun tự tạo trong dự án

– Tạo thư mục mới cho ví dụ này, ví dụ module

– Trong thư mục module, tạo tập tin cho chương trình chính, ví dụ main.js

– Mỗi mô-đun sẽ được chứa trong một tập tin riêng, vì vậy, cần tạo thêm tập tin mymodule.js để chứa mô-đun mymodule

Lưu ý: từ khóa exports dùng để cho phép bên ngoài có thể truy cập vào thuộc tính hoặc phương thức trong module

[main.js]

var chao = require('./mymodule'); // trong linux, ./ là thư mục hiện tại, 
// có dấu ./ là tìm module theo đường dẫn
chao.xinChao();

[mymodule.js]

exports.xinChao = function() {
        console.log('Teo xin chao ba con');
}
// từ khóa exports dùng để cho phép bên ngoài có 

// thể truy cập vào thuộc tính hoặc phương thức trong module
-----
Cập nhật: [15/04/2020]
-----
Xem thêm: MERN (5) - Tổng quan React và component
Xem thêm: Danh sách bài học