Node.js模块的导出

在Node.js中,module.exportsexports 是两种导出模块的方式,它们的作用是使得模块中的内容可以被其他模块引用和使用。

  1. module.exports:
    • module.exports 是一个指向当前模块所导出内容的对象的引用。你可以通过给 module.exports 赋值来导出一个对象、函数、类或者任何其他的JavaScript类型。
// example.js
module.exports = {
  foo: 'bar',
  baz: function() {
    console.log('baz');
  }
};
  1. exports:
    • exportsmodule.exports 的一个引用,它是一个特殊的变量,指向了 module.exports
// example.js
exports.foo = 'bar';
exports.baz = function() {
  console.log('baz');
};

不要同时使用exports和module.exports

虽然 exportsmodule.exports 都可以用来导出内容,但是在同一个模块中不应该同时使用它们。因为在模块加载完成后,Node.js 会返回 module.exports 而不是 exports。如果你同时使用了它们,但只有其中一个被赋值,那么最终导出的内容只会是 module.exports 所指向的对象,而 exports 上的属性将被忽略。

// example.js
// 此处使用 exports 导出变量
exports.baz = function() {
  console.log('baz');
};
// 此处使用 module.exports 导出对象
module.exports = {
  foo: 'bar'
};

当在同一个模块中同时使用 module.exportsexports 时,只有 module.exports 的赋值会生效,而 exports 上的属性将被忽略。这可能会导致一些意想不到的结果。下面是一个示例来说明这一点:

// example.js
// 此处使用 module.exports 导出对象
module.exports = {
  foo: 'bar'
};

// 此处使用 exports 导出变量
exports.baz = function() {
  console.log('baz');
};

在上面的例子中,module.exports 导出了一个对象 { foo: 'bar' },而 exports 导出了一个函数 baz。但是,由于最终模块导出的是 module.exports 所指向的对象,而不是 exports,所以 exports 上的属性不会被导出。

因此,在这个例子中,其他模块引入 example.js 后只能访问到 foo,而不能访问到 baz

正确的做法是要么只使用 module.exports,要么只使用 exports

不要直接给exports赋值

exports正确的用法是给他添加属性,如果直接赋值,将会导出空对象。

exports是module.export的一个引用。给exports添加属性就等于是给module.exports添加属性,直接给exports赋值,就改变了变量exports的指向,就是说exports不再是module.exports的引用。那么此时module.exports就是空对象。

// example.js
exports=123

导入example.js模块的文件,得到的是一个空对象。这是因为只有 module.exports 指向的对象才会被导出,而不是 exports

相关推荐

  1. Node.js模块导出

    2024-04-12 08:48:08       175 阅读
  2. Node.js中导入导出

    2024-04-12 08:48:08       38 阅读
  3. ES6模块导入导出方式

    2024-04-12 08:48:08       60 阅读
  4. [node] Node.js内置模块

    2024-04-12 08:48:08       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 08:48:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 08:48:08       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 08:48:08       82 阅读
  4. Python语言-面向对象

    2024-04-12 08:48:08       91 阅读

热门阅读

  1. 机器人规划算法——A*算法

    2024-04-12 08:48:08       161 阅读
  2. GitHub 与 Git 的区别

    2024-04-12 08:48:08       45 阅读
  3. STM32 文档整理

    2024-04-12 08:48:08       31 阅读
  4. 【gitlab】修改默认存放存放目录

    2024-04-12 08:48:08       197 阅读
  5. 数据湖/数据仓库

    2024-04-12 08:48:08       37 阅读
  6. MVC和MVVM这两种设计模式的区别

    2024-04-12 08:48:08       40 阅读
  7. [大模型]Atom-7B-chat 全量微调

    2024-04-12 08:48:08       43 阅读