在 JS 模块化编程的模块引入上, 主要有两种方式:node
模块引入:require()es6
模块导出:exports 或者 module.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'
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'
exports
返回的是模块函数,module.exports
返回的是模块对象自己,返回的是一个类使用 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] }
export
能够有多个,export default
只能向外暴露一次export
方式导出,在导入时要加{ },export default
则不须要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
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