Diffenrences between require/exports & import/export

遵循的模块化规范不同

require/exports是commonjs规范;import/export是ES6规范

形式不同

require/exports的用法只有以下三种

1
2
3
const fs = require('fs')
exports.fs = fs
module.exports = fs

import/export的写法多种多样

1
2
3
4
5
6
7
8
9
10
11
12
import fs from 'fs'
import {default as fs} from 'fs'
import * as fs from 'fs'
import {readFile} from 'fs'
import {readFile as read} from 'fs'
import fs, {readFile} from 'fs'

export default fs
export const fs
export function readFile
export {readFile, read}
export * from 'fs'

本质差别

  1. CommonJs & ES6 Module 输出都可以看成是一个具备多个属性或者方法的对象。
  2. default是ES6 Module独有的关键字,export default fs输出默认的接口对象,import fs from ‘fs’可以直接导入这个对象。
  3. ES6 Module中导入的属性或者方法是强绑定的,包括基础类型;而CommonJS是普通的值传递或者引用传递。
require import
动态评估 静态评估
运行时报错 解析时报错
非关键词 关键词
1
2
3
4
5
6
7
8
9
// dep.js
export let a = 1
setTimeout(()=> a+=1, 500)

// app.js
import {a} from 'dep'
setTimeout(function() {
console.log(a)
}, 1000)

输出为2.而commonjs为1。

module.exports和exports区别

首先,导出的永远为module.exports对象。而exports对象仅为module.exports的引用。

Comments