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属性。
在b.js中,想调用a.js的方法或者变量,首先,a.js中的变量或者方法必须暴露出来
2. ES6模块化
export 和 export default为导出,import为导入
2.1 export导出
export在一个js文件中可以存在多个,可以导出变量,方法等
写法1:每定义一个变量或者方法,单独导出
写法2:定义完所有的变量和方法, 全部导出
2.2 export default
使用export default命令,为模块指定默认输出。每一个js文件只能有一个export default导出,并且可以不需要定义变量名或者方法名
2.3 引入 import
在使用export导出的时候,导出的是对象,对象里面是每个导出的变量或者方法
使用export default导出的时候,导出js文件,import js文件名 form ‘路径’