Nodejs module

Nodejs Module

NodeJs module sử dụng hàm require()module.exports. Sử dụng cách này khác biệt với cách sử dụng của ES module đã giới thiệu ở bài trước. Cách sử dụng như sau:

1
2
3
4
5
6
const module = require('./module.js');

module.exports = {
  PI: 3.14,
  A: class {}
};

Chúng ta cũng có thể sử dụng exports vì nó sẽ link tới module.exports.

1
2
3
4
5
6
7
8
// cách sử dụng đúng exports
exports.PI = 3.14;
exports.A = class A {};

// sai vì exports đã link tới một đối tượng khác
exports = {
  PI: 3.14
}

Giải thích về module trong NodeJs

Hàm require trong NodeJs để load các module khác. Đầu vào của hàm này có thể là file.js hoặc file.json hoặc thư mục. Ngoài ra thì có thể require thư viện hệ thống của NodeJs như require('http').

Tham số trong require thì có thể là đường dẫn đến file (bắt đầu bằng ./, ..//) hoặc NodeJs sẽ tìm trong thư mục node_modules của dự án.

Ngoài ra còn có thể cài đặt giá trị NODE_PATH là danh sách các thư mục mà NodeJs có thể require.

Tiếp theo là các module được cache, có nghĩa là chúng chỉ load module foo ở lần đầu khi gọi require('foo'). Các lần sau không phải load lại.

Trong mã nguồn của NodeJs các module được bao trong một hàm như sau:

1
2
3
(function(exports, require, module, __filename, __dirname) {
  // Mã nguồn module ở đây
});

Làm như vậy để:

  • Các khai báo biến var, let, const, hàm, class được bao đóng và không được pulic ra ngoài.
  • Cung cấp các bên ngoài gồm có export, require để truy xuất vào module

Cuối cùng nếu chúng ta sử dụng return ở giữa module thì các code ở sau sẽ không chạy nữa. Nên thường chúng ta không sử dụng return như vậy.

1
2
3
4
5
6
// cách sử dụng đúng exports
exports.PI = 3.14;

return 0; // kết thúc ở đây, code bên dưới sẽ không chạy

exports.A = class A {};