区别一
module.exports
和exports
是CommonJs
的规范,被使用于Node.js
中export
、export default
是ES6
的规范,被用于React、Vue
中
区别二
通过export
方式导出时,导入要加上 { }
通过export default
导出时,不需要
区别三
module
代表一个模块,exports
是module
的属性,表示对外的接口。加载某个模块,其实就是加载该模块的module.exports
属性。
区别四
CommonJs(require)
运行时加载(动态加载);ES6(import)
编译时加载(静态加载),必须放在文件开头。
区别五
require
是请求整个包对象而import是只请求模块中需要的部分。
本质区别六
两者的输出都是一个具备多个属性和方法的对象import
导入模块的属性和方法是强绑定的,包括基础类型;导入和导出的只都指向同一个内存地址。require
则是普通的值传递或者引用传递。(旧值)就算导出的值发生变化,导入的值也不会发生变化。
写法不一样
require写法
1
2
3const fs = require('fs');
exports.fs = fs
module.exports = fsimport写法很多
1
2
3
4
5
6
7
8
9
10import fs from 'fs';
import {default as fs} from 'fs';
import * as fs from 'fs';
import {readFile} from 'fs';
import fs, {readFile} from 'fs'
export default fs;
export const fs;
export {readFile, read};
export * from 'fs'
提问
1.
require
和import
会不会循环引用不会,因为模块执行后会把导出的值缓存。下次再
require
或import
都是读的缓存,不会再次执行。