Chúng tôi có thể sử dụng xuất nhập khẩu trong NodeJS không?

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ó một tệp tiện ích utility.js 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
}

utility.js là một mô-đun mà các tệp khác có thể nhập nội dung từ đó. Nhưng utility.js hiện 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 đối tượng

console.log(module)

// {
//   id: ".",
//   path: "...",
//   exports: {},
//   parent: null,
//   filename: "...",
//   loaded: false,
//   children: [],
//   paths: [
//     ...
//   ],
// }
2 toàn cầu 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 utility.js 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 một 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

Hiện tại,

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

module.exports = { value1, function1 }

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

console.log(module)

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

exports.value1 = value1
exports.function1 = function1

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ị

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 lưu ý ở đây

  • Từ khóa
    console.log(module)
    
    // {
    //   id: ".",
    //   path: "...",
    //   exports: {},
    //   parent: null,
    //   filename: "...",
    //   loaded: false,
    //   children: [],
    //   paths: [
    //     ...
    //   ],
    // }
    
    5 là một 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 các giá trị chỉ bằng từ khóa

console.log(module)

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

// ...
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 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 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 bằng phương thức toàn cục
module.exports = { value1, function1 }
2

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO


Chúng tôi có thể sử dụng xuất nhập khẩu trong NodeJS không?
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 đơn giản hóa JavaScript / ReactJS / NodeJS / Frameworks / TypeScript / v.v. Kênh YT của tôi. youtube. com/c/deeecode


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

Tôi có thể sử dụng xuất nhập trong NodeJS không?

Nút. js tuân theo hệ thống mô-đun commonJS và nó yêu cầu bao gồm các mô-đun tồn tại trong các tệp riêng biệt và vì mục đích đó nó có các phương thức như “yêu cầu” và “xuất và nhập ES6” có sẵn trong nút. js .

Chúng tôi có thể sử dụng tính năng nhập trong NodeJS không?

NodeJS cho phép chúng tôi nhập các mô-đun CommonJS từ Mô-đun ES . Nếu chúng tôi muốn nhập ví dụ xuất lớp CommonJS của chúng tôi ở trên, quá trình nhập Mô-đun ES của chúng tôi sẽ giống như thế này. // mục lục. mjs nhập Logger từ ". /tiều phu.

Nút có hỗ trợ xuất không?

Tất cả nút. các gói tích hợp js như fs và đường dẫn hỗ trợ cả ba loại xuất .

Chúng tôi có thể xuất lớp trong NodeJS không?

Xuất lớp với phương thức tĩnh. Nếu bạn muốn xuất một lớp có phương thức tĩnh từ mô-đun NodeJS thì ý tưởng đơn giản là xuất chính một lớp đó .