Module.exports trong nodejs

Trong bài viết này, tôi sẽ chỉ cho bạn cách chia sẻ các chức năng 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ủa mình

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í họ 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ó

Nút. js hỗ trợ Mô-đun CommonJS và Mô-đun ECMAScript

Trong 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 module trong Node. js

Nếu bạn muốn tìm hiểu thêm về các 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

Nút. 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

Nút. 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ụ: giả sử bạn có tệp tiện ích

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9 với mã sau

// utility.js

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

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9 là một mô-đun mà các tệp khác có thể nhập nội dung từ đó. Nhưng hiện tại
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9 không xuất được gì

Bạn có thể xác minh điều này bằng cách kiểm tra đối tượng toàn cầu

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
2 trong mỗi tệp. Khi bạn in đối tượng toàn cầu
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
2 trong tệp tiện ích này, bạn có

console.log(module)

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

Đối tượng

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
2 có thuộc tính
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
5, 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

Tệp

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9 có phương thức
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
7 thay thế các ký tự trong chuỗi bằng một số ký tự khác. Chúng tôi có thể xuất chức năng 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

Bây giờ,

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
7 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

mô-đun. xuất 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

console.log(module)

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

console.log(module)

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

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

console.log(module)

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

console.log(module)

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

Có gì khác biệt?

Các phương pháp này khá giống nhau. Về cơ bản,

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
5 đóng vai trò là tham chiếu đến
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9. Để hiểu rõ hơn về điều này, hãy thêm đối tượng
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
5 bằng cách sử dụng hai cách xuất giá trị

console.log(module)

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

Có hai điều cần lưu ý ở đây

  • Từ khóa
    console.log(module)
    
    // {
    //   id: ".",
    //   path: "...",
    //   exports: {},
    //   parent: null,
    //   filename: "...",
    //   loaded: false,
    //   children: [],
    //   paths: [
    //     ...
    //   ],
    // }
    
    5 là tham chiếu đến đối tượng
    console.log(module)
    
    // {
    //   id: ".",
    //   path: "...",
    //   exports: {},
    //   parent: null,
    //   filename: "...",
    //   loaded: false,
    //   children: [],
    //   paths: [
    //     ...
    //   ],
    // }
    
    5 trong đối tượng
    // 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
    
    6. Bằng cách thực hiện
    // 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
    
    7, nó đã thêm thuộc tính
    // 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
    
    8 vào đối tượng
    console.log(module)
    
    // {
    //   id: ".",
    //   path: "...",
    //   exports: {},
    //   parent: null,
    //   filename: "...",
    //   loaded: false,
    //   children: [],
    //   paths: [
    //     ...
    //   ],
    // }
    
    9, như bạn có thể thấy trong nhật ký đầu tiên
  • Nhật ký thứ hai không chứa bản xuất
    // 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
    
    8 nữa. Nó chỉ có chức năng được xuất bằng cách sử dụng
    console.log(module)
    
    // {
    //   id: ".",
    //   path: "...",
    //   exports: {},
    //   parent: null,
    //   filename: "...",
    //   loaded: false,
    //   children: [],
    //   paths: [
    //     ...
    //   ],
    // }
    
    9. Tại sao cái này rất?

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

// then use the function anywhere
2 là một cách gán lại một đối tượng mới cho thuộc tính
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
5. Đối tượng mới chỉ chứa chức năng, vì vậy
// 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
8 không còn được xuất

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

Xuất giá trị chỉ bằng từ khóa

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
5 là cách nhanh chóng để xuất 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 đối tượng
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9. Nhưng nếu bạn đang sử dụng
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
5 trong một tệp, hãy tiếp tục sử dụng nó trong toàn bộ tệp đó

Sử dụng

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9 là một cách chỉ định rõ ràng kết quả xuất của mô-đun. Và điều này lý tưởng nhất là 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 thuộc tính
console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9 và mô-đun chỉ xuất những gì khai báo thứ hai nêu

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

console.log(module)

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

hoặc như thế này

console.log(module)

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

Gói (lại

Mỗi tệp trong một Nút. dự án 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

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9 là một đối tượng trong Nút. js chứa các giá trị và hàm đã xuất từ ​​mô-đun đó

Khai báo một đối tượng

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
9 trong tệp chỉ định các giá trị sẽ được xuất từ ​​tệp đó. Khi xuất, một mô-đun khác không thể nhập các giá trị này bằng phương pháp toàn cầu ________ 112

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO


Module.exports trong nodejs
Dillion Megida

Người ủng hộ nhà phát triển và Người sáng tạo nội dung đam mê chia sẻ kiến ​​thức của tôi về Công nghệ. Tôi dạy JavaScript / ReactJS / NodeJS / React Frameworks / TypeScript / et al


Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Cách xuất mô-đun hoạt động trong nút JS?

Mô-đun. xuất khẩu là một đối tượng đặc biệt được bao gồm trong mọi tệp JavaScript trong Nút. ứng dụng js theo mặc định. Mô-đun là một biến đại diện cho mô-đun hiện tại và xuất là một đối tượng sẽ được hiển thị dưới dạng mô-đun .

Sự khác biệt giữa xuất khẩu và xuất khẩu mô-đun là gì?

Khi chúng tôi muốn xuất một lớp/biến/hàm từ mô-đun này sang mô-đun khác, chúng tôi sử dụng mô-đun. xuất . Thí dụ. Tạo hai tập tin máy tính.

Làm cách nào để nhập xuất mô-đun trong bản thảo?

Cách tiếp cận. Trước khi nhập bất kỳ mô-đun nào, chúng tôi cần xuất mô-đun đó từ một tệp khác. Chúng tôi có thể tạo một mô-đun bằng cách sử dụng từ khóa xuất và có thể sử dụng nó trong các mô-đun khác bằng cách sử dụng từ khóa nhập . Chúng tôi có thể xuất cả mô-đun dựa trên lớp và mô-đun dựa trên chức năng.

Làm thế nào chúng ta có thể hiển thị các mô-đun nút?

API tệp xuất do hệ thống mô-đun cung cấp để triển khai trong mã. mô-đun là một biến đại diện cho mô-đun hiện tại và xuất khẩu là một đối tượng sẽ được hiển thị dưới dạng mô-đun. Vì vậy, mô-đun. xuất khẩu và xuất khẩu sẽ được hiển thị dưới dạng một mô-đun.