"Module là nền tảng giúp chia nhỏ chương trình thành nhiều tệp, dễ quản lý, dễ tái sử dụng và dễ bảo trì. Hầu hết mọi ứng dụng Node.js đều được xây dựng từ các module."
Mục tiêu bài học
Sau bài học này, bạn sẽ:
Hiểu Module là gì.
Biết tại sao phải chia chương trình thành nhiều file.
Hiểu CommonJS.
Hiểu ES Module.
Sử dụng
require().Sử dụng
module.exports.Sử dụng
import.Sử dụng
export.Hiểu vai trò của
package.json.
Module là gì?
Module là một file JavaScript chứa:
biến
hằng số
hàm
class
đối tượng
để có thể sử dụng lại ở nhiều nơi.
Ví dụ:
project
│
├── app.js
├── math.js
└── string.js
Thay vì viết toàn bộ chương trình trong một file, chúng ta chia thành nhiều module.
Ưu điểm:
dễ đọc
dễ bảo trì
dễ mở rộng
tái sử dụng
nhiều người cùng làm việc
Vì sao cần Module?
Giả sử bạn viết toàn bộ chương trình trong một file:
app.js
Sau vài tháng:
3000 dòng
5000 dòng
10000 dòng
Việc tìm kiếm và sửa lỗi sẽ trở nên rất khó khăn.
Module giúp chia chương trình thành từng phần nhỏ.
Ví dụ:
controllers/
models/
routes/
services/
utils/
Đây cũng là cách tổ chức mà Express và NestJS sử dụng.
CommonJS
Trong nhiều năm, Node.js sử dụng hệ thống module mặc định là:
CommonJS
CommonJS sử dụng:
require()
module.exports
Đây vẫn là hệ thống rất phổ biến và bạn sẽ gặp trong nhiều dự án cũ.
Tạo Module đầu tiên
Tạo file:
math.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
Trong app.js
const sum = require("./math");
console.log(sum(10, 20));
Kết quả:
30
Export nhiều hàm
function sum(a, b) {
return a + b;
}
function sub(a, b) {
return a - b;
}
module.exports = {
sum,
sub
};
Import:
const math = require("./math");
console.log(math.sum(10, 5));
console.log(math.sub(10, 5));
Kết quả:
15
5
Destructuring
Có thể viết ngắn hơn:
const { sum, sub } = require("./math");
console.log(sum(5, 5));
console.log(sub(10, 3));
Export biến
const PI = 3.14;
module.exports = PI;
Import:
const PI = require("./math");
console.log(PI);
Export Object
module.exports = {
name: "Node.js",
version: "2026"
};
Import:
const app = require("./math");
console.log(app.name);
console.log(app.version);
ES Module
JavaScript hiện đại đã có hệ thống module riêng.
Đó là:
ES Module
Sử dụng:
import
export
Đây là chuẩn chính thức của JavaScript và ngày càng được sử dụng rộng rãi trong các dự án mới.
Kích hoạt ES Module
Mở file:
package.json
Thêm:
{
"type": "module"
}
Từ bây giờ Node.js sẽ hiểu rằng project sử dụng ES Module.
Export
Ví dụ:
export function sum(a, b) {
return a + b;
}
Import:
import { sum } from "./math.js";
console.log(sum(20, 30));
Kết quả:
50
Export nhiều hàm
export function sum(a, b) {
return a + b;
}
export function sub(a, b) {
return a - b;
}
Import:
import { sum, sub } from "./math.js";
console.log(sum(10, 2));
console.log(sub(10, 2));
Default Export
export default function hello() {
console.log("Hello Node.js");
}
Import:
import hello from "./hello.js";
hello();
So sánh CommonJS và ES Module
| CommonJS | ES Module |
|---|---|
| require() | import |
| module.exports | export |
| exports | export |
| Mặc định của Node.js cũ | Chuẩn JavaScript hiện đại |
| Phổ biến ở dự án cũ | Phổ biến ở dự án mới |
package.json là gì?
Mỗi project Node.js đều có:
package.json
Đây là "chứng minh thư" của project.
Nó chứa:
tên project
phiên bản
tác giả
dependencies
scripts
license
type
Ví dụ:
{
"name": "node-basic",
"version": "1.0.0",
"type": "module"
}
Tạo package.json
Chạy:
npm init
Hoặc nhanh hơn:
npm init -y
Node.js sẽ tự sinh:
package.json
Cấu trúc thư mục
Ví dụ:
node-basic
│
├── package.json
├── app.js
├── math.js
├── string.js
└── utils.js
Đây là cách tổ chức cơ bản của hầu hết các dự án Node.js.
Khi nào dùng CommonJS?
Nên dùng khi:
bảo trì dự án cũ
làm việc với package chưa hỗ trợ ES Module
cần tương thích với mã nguồn cũ
Khi nào dùng ES Module?
Đối với các dự án mới, nên ưu tiên ES Module vì:
là chuẩn chính thức của JavaScript
cú pháp hiện đại
đồng nhất với trình duyệt
được các framework mới như Express 5, Vite và Next.js hỗ trợ tốt
Trong khóa học này, chúng ta sẽ ưu tiên sử dụng ES Module, đồng thời vẫn tìm hiểu CommonJS để có thể đọc và bảo trì các dự án cũ.
Một số lỗi thường gặp
Không thêm "type": "module"
Ví dụ:
import { sum } from "./math.js";
Sẽ báo lỗi nếu project vẫn đang dùng CommonJS.
Quên phần mở rộng .js
Sai:
import { sum } from "./math";
Đúng:
import { sum } from "./math.js";
Sai đường dẫn
import { sum } from "./utils/math.js";
Hãy kiểm tra lại vị trí file và đường dẫn tương đối.
Trộn CommonJS và ES Module
Không nên viết:
const fs = require("fs");
import { sum } from "./math.js";
Hãy thống nhất sử dụng một hệ thống module trong cùng một project.
Tổng kết
Qua bài học này, bạn đã biết:
✅ Module giúp chia chương trình thành nhiều file nhỏ.
✅ Hiểu cách sử dụng
require()vàmodule.exportstrong CommonJS.✅ Hiểu cách sử dụng
importvàexporttrong ES Module.✅ Biết vai trò của
package.json.✅ Biết khi nào nên dùng CommonJS và khi nào nên dùng ES Module.
Module là nền tảng quan trọng của Node.js. Từ bài học này trở đi, hầu hết các chương trình trong khóa học sẽ được tổ chức thành nhiều module thay vì chỉ một file duy nhất.
Bài tập thực hành
Bài 1
Tạo file math.js chứa hàm:
export function sum(a, b) {
return a + b;
}
Import vào app.js và hiển thị kết quả của:
sum(10, 20)
//bài giải:
import {sum} from "./math.js";
console.log(sum(10, 20));
Bài 2
Thêm hai hàm:
sub()mul()
Import cả ba hàm và tính:
20 + 5
20 - 5
20 × 5
Bài giải:
math.js
export function sum(a, b) {
return a + b;
}
export function sub(a, b) {
return a - b;
}
export function mul(a, b) {
return a * b;
}
app.js
import {sum, sub, mul} from "./math.js";
console.log(sum(20, 5));
console.log(sub(20, 5));
console.log(mul(20, 5));
Bài 3
Tạo hello.js sử dụng Default Export để in:
Hello Node.js!
Sau đó import và gọi hàm trong app.js.
Bài giải:
hello.js
export default function hello() {
console.log("Hello Node.js");
}
app.js
import hello from "./hello.js";
hello();
Bài 4
Khởi tạo một project mới bằng:
npm init -y
Mở package.json và giải thích ý nghĩa của các trường:
name (tên project)version (phiên bản)type (kiểu module)
Bài 5 ⭐ Thử thách
Tạo project với cấu trúc:
node-basic
│
├── app.js
├── package.json
└── utils
├── math.js
└── string.js
Trong đó:
math.jschứa các hàm tính toán (sum,sub).string.jschứa hàm chuyển chuỗi thành chữ in hoa (toUpperCase).
Import các module vào app.js và kiểm tra kết quả.
Bài Giải:
math.js
export function sum(a, b) {
return a + b;
}
export function sub(a, b) {
return a - b;
}
string.js
export function inHoa (s) {
return String(s).toUpperCase();
}
app.js
import {sum, sub} from "./utils/math.js";
import {inHoa} from "./utils/string.js";
console.log(sum(5, 10));
console.log(sub(5, 10));
console.log(inHoa("hello node.js"));
📖 Bài tiếp theo: Bài 05 — npm: package.json, package-lock.json, dependencies, devDependencies và scripts.
x1
quay về MỤC LỤC




Không có nhận xét nào:
Đăng nhận xét