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

common.js模块化和ES6模块化不同

1.common.js规范

node开发中,根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。每一个js文件都相当于一个js函数:

function(exports,require,module,__filename,__dirname){}

 exports: 该对象用于暴露这个js文件函数内部的私有变量或者方法

require:用于引入外部的模块

module: 代表当前模块本身,exports就是Module的属性,可以使用exports导出,也可以使用Module.exports导出

 __filename: 当前文件的完整路径

  __dirname: 当前文件处在的完整文件夹路径,不包括当前文件

exports和module.exports区别:

因为在暴露的时候: return module.exports

1)exports只能使用.语法来向外暴露内部变量  exports.xxx = xxx;

2)module.exports既可以通过.语法,也可以直接赋值一个对象  module.exports.xxx = yyy;module.exports = {xxx: yyy};

3)exports类似于一根指针,指向module.exports,所以可以使用module.exports = {}输出,但是不能使用exports输出,

在输出的时候,因为return module.exports,所以输出的内容以module.exports为准

注: module.exports可以是对象,exports指向的是module.exports,如果是对象,就指向的是一个空的对象


CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

上面代码在a.js中通过exports暴露出a变量和fn方法

在b.js中,想调用a.js的方法或者变量,首先,a.js中的变量或者方法必须暴露出来

在b.js中引入,B是一个对象,包含a.js暴露出来的变量和方法

2. ES6模块化

export 和 export default为导出,import为导入

2.1 export导出

export在一个js文件中可以存在多个,可以导出变量,方法等

写法1:每定义一个变量或者方法,单独导出


直接在变量或者方法前直接加上export导出

写法2:定义完所有的变量和方法, 全部导出


定义完所有变量和方法,直接以对象导出

2.2 export default

使用export default命令,为模块指定默认输出。每一个js文件只能有一个export default导出,并且可以不需要定义变量名或者方法名


在整个js文件外层嵌套


有变量名

2.3 引入 import

在使用export导出的时候,导出的是对象,对象里面是每个导出的变量或者方法


使用export default导出的时候,导出js文件,import js文件名 form ‘路径’


你可能感兴趣的:(module.exports与exports、export与export default的区别)