js中模块导入导出(export&import)问题

一、模块系统

js中模块导入导出(export&import)问题

两分钟搞定module.exports与exports区别

【test.js】

exports.hello = function() {
    console.log('hello');
}

exports.world = function() {
    console.log('world');
}
# 每个node模块都有一个默认的module对象
console.log(module)

# module.exports与exports在内存中指向的是同一个对象
console.log(module.exports)
console.log(exports)

# 验证module.exports与exports是否相等
console.log(exports==module.exports)
console.log(exports===module.exports)

# 注意:其它模块在使用require('./test.js')导入当前模块时,都会在被导入模块的文件末尾添加一行隐藏的return module.exports; 保证其可被导入
# return module.exports;

node test.js

# console.log(module)
Module {
  id: '.',
  path: '/root',
  exports: { world: [Function (anonymous)], hello: [Function (anonymous)] },
  filename: '/root/test.js',
  loaded: false,
  children: [],
  paths: [ '/root/node_modules', '/node_modules' ]
}
# console.log(module.exports)
{ world: [Function (anonymous)], hello: [Function (anonymous)] }
# console.log(exports)
{ world: [Function (anonymous)], hello: [Function (anonymous)] }
# console.log(exports==module.exports)
true
# console.log(exports===module.exports)
true

img

二、规范

简要理解CommonJS规范与ES6的模块规范

CommonJS规范

ES6 Module 的语法

三、使用

exports 和 module.exports 的使用
如果要对外暴露属性或方法,就用 exports 就行,要暴露对象(类似class,包含了很多属性和方法),就用 module.exports。

posted @ 2022-02-05 19:27  黄河大道东  阅读(58)  评论(0编辑  收藏  举报