es6的模块化暴露导入
分别暴露、统一暴露
暴露 export.js
// 分别暴露
export let a = 1
export function A() {
console.log('我是分别暴露')
}
// 统一暴露
let b = 2
function B() {
console.log("我是统一暴露")
}
export { b , B }
引入 import.js
import { a, A, b, B } from './export.js'
console.log(a) // 1
A() // 我是分别暴露
console.log(b) // 2
B() // 我是统一暴露
可以看到分别暴露、统一暴露都是将暴露的数据存放在一个对象中,在引入时通过解构赋值引入相应的值。
默认暴露
暴露 export.js
export default function C() {
console.log('我是默认暴露')
}
引入 import.js
import C from './export.js'
C() // 我是默认暴露
默认暴露是并没有把数据放在一个对象中,而是导入时直接将暴露内容返回。
nodejs 模块暴露导入
nodejs 中暴露方式有两种 module.exports 和 exports,其实二者是一个东西,在初始时指向同一个地址,只不过 exports 的书写更简便,但最终的暴露结果还是以 module.exports 为准,因此在书写时尽量只使用其中一个。
module.exports
module.exports = {
a: 0,
b() {
console.log('module.exports 暴露')
}
}
// 解构赋值导入 a, b
const { a, b } = require('./exports')
console.log(a) // 0
b() // module.exports 暴露
exports
exports.a = 0
exports.b = function() {
console.log('exports 暴露')
}
const A = require('./exports')
cosole.log(A) // { a: 0, b: [Function (anonymous)] }
以上是两种方式的暴露和导入方式
错误方式
exports = {
a: 0,
b() {
console.log('module.exports 暴露')
}
}
const A = require('./exports')
cosole.log(A) // {}
输出的值为空对象,原因是给 exports 赋值,改变了exports 的指向地址,而 module.exports 仍然指向原来的空对象,另外因为决定最后输出内容的是 module.exports 所以该方式并不可行.
总结
- es6 的暴露引入时,是用 export 和 import 搭配,而 nodejs 则是 module.exports(exports) 和 require() 搭配。
- 当然在 nodejs 环境中也是可以使用 import 导入,但是需要在 package.json 里面加上 "type": "module",同样是 export 和 import 搭配。