es6的模块化和node模块化的区别

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的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值