module.exports、exports和export、export default,以及require和import的简介和区别

353 阅读2分钟

module.exportsexportsrequire是CommonJS的规范

exportexport defaultimport是ES6的规范

1. module.exports 、exports 和 require

module.exports

  • 在每个模块中,都有一个 module 对象,它包含了有关模块的信息,包括其导出。
  • module.exports 是一个特殊的对象,用来指定模块的导出。
  • 当其它模块使用 require 加载当前模块时,返回的就是 module.exports 对象。

exports

  • exports 是 module.export 的别名,通常用来简化导出过程。
  • 默认情况下,exports 指向 module.exports
  • 可以通过给 exports 添加属性来间接修改 module.exports

require

  • 用于加载模块的函数。
  • 接受一个字符串参数,该参数就是模块的路径。
  • 返回加载模块的module.exports对象。
  • require 可以在代码的任何位置使用
  • require 实际上是一个赋值过程

示例:

// myModule.js 

function add(a, b) { return a + b; } 

module.exports = { add: add }; 

// 或者使用 exports 
exports.add = add;
// index.js 

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

console.log(myModule.add(1, 2)); // 输出: 3

注意:如果直接给exports复制一个新对象,那么exports和module.exports将不再关联

exports = {}; // 错误做法

2. export 、 export default 和 import

export

  • export 是 ES6 模块化标准的一部分,用于导出模块中的函数、对象或原始值。
  • 可以导出多个独立的成员,每个成员都需要有自己的名称。

export default

  • export default 也是 ES6 模块化的一部分,用于导出模块的默认导出。
  • 只能有一个默认导出,但可以与其他 export 语句混合使用。
  • 默认导出可以是任何东西(函数、对象、类等),并且不需要显式命名。
  • 在导入时,可以自由选择导入变量的名称。

import

  • 是一个声明,用于导入模块的导出。
  • import 必须放在模块的顶层。
  • import 实际上是一个解构过程。

注意export default 只能出现一次,而 export 可以出现多次。

示例:

// myModule.js 

export function add(a, b) { 
return a + b; 
} 

export default function subtract(a, b) { 
return a - b; 
}
// index.js 

import { add }, { subtract as sub } from './myModule'; 

console.log(add(1, 2)); // 输出: 3 

console.log(sub(5, 3)); // 输出: 2

个人记录以供学习翻看,如有表述不当,请多多指出,如有帮助,也可以点赞收藏,感谢支持~