es6的模块化和node模块化的区别是什么?
node模块化是:
Node使用CommonJS规范 ,它有四个重要的环境变量:module、exports、require、global。实际使用时,module变量代表当前模块,exports是module的属性,表示对外输出的接口,加载某个模块,实际上是加载该模块的module.exports属性。用require加载模块(同步)。
Node为每隔模块提供了一个exports变量,指向module.exports,这等同于每个模块头部有这样的一行代码:
var exports = module.exports
exports只是module.exports的一个引用,指向module.exports对象所在的地址
exports(模块导出)
require(模块导入)
module.exports
默认是一个模块对象
es6模块化是:
一个模块是一个独立的文件,该文件内部的所有变量,外部无法获取,
但是,通过export关键字输出就可以使外部访问到这个变量
export命令规定的是对外的接口,必须与模块内部的变量建立一一对应的关系,
也就是说外部接口需要用这个接口引用
在ES6模块化中,使用 import 引入模块,通过 export导出模块,但需要babel编译为浏览器可以识别的代码。
1.export与export default均可用于导出常量,函数,文件,模块等;
2.在一个文件或模块中,export,import可以有多个,export default只有一个;
3.通过export方式导出,在导入时需要加{},export default不需要;
4.export能导出变量表达式,export default不可以。
他们 之间的区别是?
CommonJS模块输出是一个值的拷贝,ES6模块输出是值的引用。
CommonJS模块是运行时加载,ES6模块是编译时输出接口。
CommonJS模块无论require多少次,都只会在第一次加载时运行一次,然后保存到缓存中,下次在require,只会去从缓存取。
require : node 和 es6 都支持的引入方式。
module.exports与exports 是node支持的导出方式。
import ,export与export default是ES6支持的导入和导出方式。
Polyfill : 解决浏览器对API的兼容问题的。
Babel : Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码。
还有就是
-----------------------------------------------------------
1.CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
注意:CommonJS 模块输出的是值的拷贝,也就是说,一旦输出一个值,模块内部的变化就影响不到这个值
ES6 模块是动态引用,并且不会缓存值,模块里面的变量绑定其所在的模块。
2.CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
原因:CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成。而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。
3.CommonJS 模块的require()是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段。
------这些都是百度cv的