NTM Solutions

Bài đăng nổi bật

🚀 Laravel 12 (2026) — Từ PHP Core đến Full Stack📘

Nếu cập nhật theo Laravel 12 LTS (2026) thì mình sẽ chia thành các phần như sau để người học đi từ PHP Core → Laravel → Triển khai dự án th...

Thứ Hai, 20 tháng 7, 2026

📘Node.js 2026 — Bài 04 — Module trong Node.js: CommonJS, ES Module, export, import và package.json

"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

CommonJSES Module
require()import
module.exportsexport
exportsexport
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()module.exports trong CommonJS.

  • ✅ Hiểu cách sử dụng importexport trong 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.js chứa các hàm tính toán (sum, sub).

  • string.js chứ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, devDependenciesscripts.

x1

quay về MỤC LỤC

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

Đăng nhận xét

Facebook Youtube RSS