14.使用 exports 从 Node.js 文件公开功能

使用 exports 从 Node.js 文件公开功能

Node.js 有一个内置的模块系统。

Node.js 文件可以导入其他 Node.js 文件公开的功能。

当你想导入你使用的东西时

const library = require('./library');

导入驻留在当前文件夹中的 library.js 文件中公开的功能。

在此文件中,必须先公开功能,然后才能被其他文件导入。

默认情况下,文件中定义的任何其他对象或变量都是私有的,不会暴露给外部世界。

这就是 module 系统 提供的 module.exports API 允许我们做的事情。

当您将对象或函数分配为新的 exports 属性时,这就是被公开的东西,因此,它可以导入到应用程序的其他部分或其他应用程序中。

您可以通过 2 种方式做到这一点。

第一个是将一个对象分配给module.exports,这是一个由模块系统开箱即用的对象,这将使您的文件导出只是那个对象

// car.js
const car = {
    
    
  brand: 'Ford',
  model: 'Fiesta',
};

module.exports = car;

第二种方法是将导出的对象添加为 exports 的属性。 这种方式允许您导出多个对象、函数或数据:

const car = {
    
    
  brand: 'Ford',
  model: 'Fiesta',
};

exports.car = car;

或者直接:

exports.car = {
    
    
  brand: 'Ford',
  model: 'Fiesta',
};

在另一个文件中,您将通过引用导入的属性来使用它:

const items = require('./items');
const {
    
     car } = items;

或者您可以使用解构赋值:

const {
    
     car } = require('./items');

module.exportsexports 有什么区别?

第一个公开它指向的对象。 后者暴露了它指向的对象的属性

require 将始终返回 module.exports 指向的对象。

// car.js
exports.car = {
    
    
  brand: 'Ford',
  model: 'Fiesta',
};

module.exports = {
    
    
  brand: 'Tesla',
  model: 'Model S',
};

// app.js
const tesla = require('./car');
const ford = require('./car').car;

console.log(tesla, ford);

这将打印 { brand: 'Tesla', model: 'Model S' } undefined,因为 require 函数的返回值已更新为 module.exports 指向的对象,所以 the property that 无法访问添加的exports

猜你喜欢

转载自blog.csdn.net/weixin_43302112/article/details/124932913