exports与module.exports的区别,以及export与export.defult的区别

在 JS 模块化编程的模块引入上, 主要有两种方式:node

  • CommonJS 模块标准
  • ES6 moduel 特性

1. CommonJS

模块引入:require()es6

模块导出:exports 或者 module.exports编程

exports 与 module.exports 区别

1.1 exports 方式:

a.js(导出):babel

const name = 'cedric' 

exports.name = name

b.js(引入):模块化

const a = require('./a.js')
console.log(a)      // { name: 'cedric' }


// 或者
// const { name } = require('./a.js')
// console.log(name)      // 'cedric'

1.2 module.exports 方式:

  • 方式一(不推荐):

a.js(导出):函数

const name = 'cedric' 

module.exports = name

b.js(引入):ui

const name = require('./a.js')

console.log(name)     // 'cedric'
  • 方式二(推荐):

a.js(导出):code

const name = 'cedric' 

module.exports = {
    name
}

b.js(引入):对象

const a = require('./a.js')
console.log(a)     // { name: 'cedric' }


// 或者
// const { name } = require('./a.js')
// console.log(name)      // 'cedric'

1.3 注意:

  • exports 返回的是模块函数,module.exports 返回的是模块对象自己,返回的是一个类
  • CommonJS 方式广泛用于node中模块的编写
  • 一个模块文件中能够有多个exports输出,但只能有一个module.exports输出

1.4 当有多个变量或函数须要输出时:


使用 exportsio

a.js:

const name = 'cedric'
const age = 18

function fun () {
    console.log('abc')
}

exports.name = name
exports.age = age
exports.fun = fun

b.js:

const a = require('./a.js')

a.fun()  // abc
console.log(a)   // { name: 'cedric', age: 18, fun: [Function: fun] }

使用 module.exports

a.js:

const name = 'cedric'
const age = 18

function fun () {
    console.log('abc')
} 

module.exports = {
    name,
    age,
    fun,
}

b.js:

const a = require('./a.js')

a.fun()  // abc
console.log(a)   // { name: 'cedric', age: 18, fun: [Function: fun] }

2. ES6 moduel

  • 模块引入:import
  • 模块导出:export 或者 export default

2.1 注意

  • 在一个文件或模块中,export能够有多个,export default 只能向外暴露一次
  • 经过export方式导出,在导入时要加{ },export default则不须要
  • Node 不支持 ES6 moduel 特性,解决方法是用 babel 编译

export与export.defult的区别

2.2 export

a.js(导出):

export const name = 'cedric'

export function fun () {
    console.log('abc')
}

导入:

import { name, fun } from './a'

console.log(name) // cedric
console.log(fun)  // fun: [Function: fun]
fun()             // abc

2.3 export default

a.js(导出):

function fun () {
    console.log('abc')
}

export default fun

// 或者:
// export default function fun () {
//     console.log('abc')
// }

导入:

import fun from './a'
 
console.log(fun)  // fun: [Function: fun]
fun()             // abc

关于export default 中的 default

实际上,a.js 文件的 export default 输出一个叫作 default 的变量,因此,当import的模块引入 a.js 时,系统容许你为它取任意变量名。因此,以下通常会使用方式:

a.js(导出):

export default () => {
    console.log('abc')
}

导入:

import 任意名称 from './a'
 
console.log(任意名称)  // () => { console.log('abc'); }
任意名称()             // abc
相关文章
相关标签/搜索