HomeLập trìnhJavaScriptmodule.exports – Cách...

module.exports – Cách xuất trong Node.js và JavaScript


Trong lập trình, mô-đun là thành phần của chương trình có một hoặc nhiều chức năng hoặc giá trị.

Những giá trị này cũng có thể được chia sẻ trên toàn bộ chương trình và có thể được sử dụng theo những cách khác nhau.

Trong bài viết này, tôi sẽ chỉ cho bạn cách chia sẻ các hàm và giá trị bằng cách xuất và nhập các mô-đun trong Node.js.

Tại sao xuất mô-đun?

Bạn sẽ muốn xuất các mô-đun để có thể sử dụng chúng trong các phần khác của ứng dụng.

Các mô-đun có thể phục vụ các mục đích khác nhau. Họ có thể cung cấp các tiện ích đơn giản để sửa đổi chuỗi. Họ có thể cung cấp các phương thức để thực hiện các yêu cầu API. Hoặc thậm chí chúng có thể cung cấp các hằng số và giá trị nguyên thủy.

Khi bạn xuất một mô-đun, bạn có thể nhập nó vào các phần khác của ứng dụng và sử dụng nó.

Node.js hỗ trợ Mô-đun CommonJS và Mô-đun ECMAScript.

Đối với phần còn lại của bài viết này, chúng ta sẽ tập trung vào CommonJS Modules, cách tiếp cận ban đầu để đóng gói các mô-đun trong Node.js.

Nếu bạn muốn tìm hiểu thêm về Mô-đun ES (cùng với các mô-đun CommonJS), bạn có thể xem hướng dẫn chuyên sâu này.

Cách xuất các mô-đun trong nút

Node.js đã xuất các mô-đun dựng sẵn bao gồm fs, đường dẫn và http để đặt tên cho một số. Nhưng bạn có thể tạo các mô-đun của riêng mình.

Đọc thêm  Học JavaScript - Hướng dẫn tương tác miễn phí trong 7 giờ

Node.js coi mỗi tệp trong dự án Node là một mô-đun có thể xuất các giá trị và chức năng từ tệp.

Ví dụ: bạn có một tệp tiện ích utility.js với đoạn mã sau:

// utility.js

const replaceStr = (str, char, replacer) => {
  const regex = new RegExp(char, "g")
  const replaced = str.replace(regex, replacer)
  return replaced
}

utility.js là một mô-đun mà các tệp khác có thể nhập nội dung từ đó. Nhưng mà utility.js hiện tại không xuất bất cứ thứ gì.

Bạn có thể xác minh điều này bằng cách kiểm tra toàn cầu module đối tượng trong mỗi tập tin. Khi bạn in module đối tượng chung trong tệp tiện ích này, bạn có:

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }

Các module đối tượng có một exports như bạn có thể thấy, là một đối tượng trống.

Vì vậy, mọi nỗ lực nhập bất kỳ thứ gì từ tệp này sẽ gây ra lỗi.

Các utility.js tập tin có một replaceStr phương thức thay thế các ký tự trong một chuỗi bằng một số ký tự khác. Chúng ta có thể xuất hàm này từ mô-đun này để sử dụng cho các tệp khác.

Đây là cách:

// utility.js

const replaceStr = (str, char, replacer) => {
  const regex = new RegExp(char, "g")
  const replaced = str.replace(regex, replacer)
  return replaced
}

module.exports = { replaceStr }
// or
exports.replaceStr = replaceStr

Hiện nay, replaceStr có sẵn để sử dụng trong các phần khác của ứng dụng. Để sử dụng nó, bạn nhập nó như thế này:

const { replaceStr } = require('./utility.js')

// then use the function anywhere

module.exports so với xuất trong Node

Bạn có thể xuất các hàm và giá trị từ một mô-đun bằng cách sử dụng module.exports:

module.exports = { value1, function1 }

hoặc bằng cách sử dụng exports:

exports.value1 = value1
exports.function1 = function1

Có gì khác biệt?

Đọc thêm  JavaScript viết hoa chữ cái đầu tiên – Cách viết hoa chữ cái đầu tiên trong một từ bằng JS

Những phương pháp này là khá giống nhau. Về cơ bản, exports phục vụ như một tài liệu tham khảo để module.exports. Để hiểu điều này tốt hơn, chúng ta hãy điền vào exports đối tượng bằng cách sử dụng hai cách xuất giá trị:

const value1 = 50
exports.value1 = value1

console.log(module)
// {
//   id: ".",
//   path: "...",
//   exports: { value1: 50 },
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }

const function1 = function() {
  console.log("I am a function")
}
module.exports = { function1, ...module.exports }

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: { function1: [Function: function1] },
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }

Có hai điều cần chú ý ở đây:

  • Các exports từ khóa là một tham chiếu đến exports đối tượng trong modules vật. bằng cách làm exports.value1 = value1nó đã thêm value1 tài sản cho module.exports đối tượng, như bạn có thể thấy trong nhật ký đầu tiên.
  • Nhật ký thứ hai không chứa value1 xuất khẩu nữa. Nó chỉ có chức năng được xuất bằng cách sử dụng module.exports. Tại sao cái này rất?

module.exports = ... là một cách gán lại một đối tượng mới cho exports tài sản. Đối tượng mới chỉ chứa chức năng, vì vậy value1 không còn được xuất khẩu.

Vậy sự khác biệt là gì?

Xuất giá trị chỉ với exports từ khóa là một cách nhanh chóng để xuất các giá trị từ một mô-đun. Bạn có thể sử dụng từ khóa này ở trên cùng hoặc dưới cùng và tất cả những gì nó làm là điền vào module.exports vật. Nhưng nếu bạn đang sử dụng exports trong một tệp, hãy kiên trì sử dụng nó trong suốt tệp đó.

Đọc thêm  Cách đảo ngược một mảng trong JavaScript – Hàm JS .reverse()

sử dụng module.exports là một cách chỉ định rõ ràng xuất khẩu của mô-đun. Và lý tưởng nhất là điều này chỉ tồn tại một lần trong một tệp. Nếu nó tồn tại hai lần, khai báo thứ hai sẽ gán lại module.exports thuộc tính và mô-đun chỉ xuất nội dung khai báo thứ hai.

Vì vậy, như một giải pháp cho mã trước đó, bạn có thể xuất như thế này:

// ...
exports.value1 = value1

// ...
exports.function1 = function1

hoặc như thế này:

// ...
module.exports = { value1, function1 }

Gói (lại

Mỗi tệp trong dự án Node.js được coi là một mô-đun có thể xuất các giá trị để các mô-đun khác sử dụng.

module.exports là một đối tượng trong tệp Node.js chứa các giá trị và hàm đã xuất từ ​​mô-đun đó.

Khai báo một module.exports đối tượng trong một tệp chỉ định các giá trị sẽ được xuất từ ​​tệp đó. Khi được xuất, một mô-đun khác có thể nhập các giá trị này với require phương pháp toàn cầu.



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status