乐闻世界logo
搜索文章和话题

module.exports和exports的区别是什么?export和export default的区别是什么?

浏览11
6月24日 16:43

module.exports vs exports

在 Node.js 中,module.exportsexports 都是用于导出模块中的变量或者函数,以便其他文件可以使用 require 方法来引入和使用。但是它们之间存在一些区别:

  1. module.exports:

    • 这是真正用于定义模块导出的对象。在模块中,可以通过对 module.exports 赋值来指定导出的内容。
    • 如果你需要导出单个值或者一个完整的对象,通常会使用 module.exports
    • 例子:假设你有一个工具模块,想要导出一个类。
      javascript
      class Tool { // ... } module.exports = Tool;
  2. exports:

    • exportsmodule.exports 的一个引用,Node.js 默认在每个模块的头部创建了 exports = module.exports
    • 它通常用于导出多个对象或函数。
    • 但是,如果你给 exports 直接赋一个新值,它就不再指向 module.exports,这就可能导致模块导出一个空对象 {}
    • 例子:假设你有一个工具模块,想要导出多个函数。
      javascript
      exports.function1 = function() { // ... }; exports.function2 = function() { // ... };

如果设置了 module.exportsexports 对象会被忽略。因此,不应该同时使用 module.exportsexports 导出不同的东西,以避免混淆或错误。

export vs export default

在 ES6 模块系统中,exportexport default 用于导出模块内容,但它们的用途和语法有所不同:

  1. export:

    • 用于导出一个或多个命名的变量、函数、类等。
    • 导入时需要使用花括号 {} 并指定相应的名称。
    • 可以在一个模块中使用多个 export
    • 例子:导出多个功能。
      javascript
      export const CONSTANT = 'constant value'; export function myFunction() { // ... }
  2. export default:

    • 用于导出一个模块的默认输出。
    • 导入时不需要使用花括号,可以给导入的内容任意命名。
    • 一个模块只能有一个 export default
    • 例子:导出一个模块的主要功能或类。
      javascript
      export default class MyClass { // ... }
    • 另一个例子是,在一个模块中即使用 export 导出多个值,也可以指定一个默认导出。
      javascript
      export const util1 = () => { /* ... */ }; export const util2 = () => { /* ... */ }; export default () => { /* ... */ }; // 这是默认导出

在使用时,import myDefaultImport from 'my-module' 会导入 export default 的值,而 import { namedImport } from 'my-module' 会导入通过 export 命名导出的值。

总结来说,module.exportsexports 用于 Node.js 的 CommonJS 模块系统,而 exportexport default 用于 ES6 模块系统。选择哪一个取决于你的使用环境和特定的需求。

标签:前端ES6