exports、module.exports、export、export default的区别

区别一

module.exportsexportsCommonJs的规范,被使用于Node.js
exportexport defaultES6的规范,被用于React、Vue

区别二

通过export方式导出时,导入要加上 { }
通过export default导出时,不需要

区别三

module代表一个模块,exportsmodule的属性,表示对外的接口。加载某个模块,其实就是加载该模块的module.exports属性。

区别四

CommonJs(require)运行时加载(动态加载);
ES6(import)编译时加载(静态加载),必须放在文件开头。

区别五

require是请求整个包对象而import是只请求模块中需要的部分。

本质区别六

两者的输出都是一个具备多个属性和方法的对象
import导入模块的属性和方法是强绑定的,包括基础类型;导入和导出的只都指向同一个内存地址。
require则是普通的值传递或者引用传递。(旧值)就算导出的值发生变化,导入的值也不会发生变化。

写法不一样

  • require写法

    1
    2
    3
    const fs = require('fs');
    exports.fs = fs
    module.exports = fs
  • import写法很多

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import 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.requireimport会不会循环引用

    不会,因为模块执行后会把导出的值缓存。下次再requireimport都是读的缓存,不会再次执行。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2024 HL's Blog All Rights Reserved.

UV : | PV :