commonjs规范和es6,commonjs和es6混用

本文目录一览:

CommonJS与ES6模块化的具体使用方式

所以:只需要将需要暴露给外部的变量或者方法 设置为exports的属性 就行,

可以把exports看做一个全局对象,把所有暴露出来的函数和变量都存放在里面

1.先写个6.js文件

CommonJS规范规定,每个模块内部,module变量代表当前模板,这个变量是一个对象,他的 exports 属性(相当于 module.exports )是对外的接口。 这里详情请看我的另一篇文章: module、exports 和 require的关系

加载某个模块,其实是加载该模块的module.exports属性。require方法用于加载模块

ES6模块化的使用方法:(注!因为CommonJS类库众多,以及 CommonJS 和 ES6 之间的差异,所以无法直接兼容es6。)

直接/按需导出:可使用多个 用变量/常量的方式

导入:需要用按需导入 {解构} 的方式获取

默认导出:只能使用一个 (default属性只有es6才有)可以用引入对象定义多个属性,但这样在引入后调用的时候,更麻烦。

导入:优点:可以直接使用文件做接收参数且不用结构。

重命名export和import

如果导入的多个文件中,变量名字相同,即会产生命名冲突的问题,为了解决该问题,ES6为提供了重命名的方法,当你在导入名称时可以这样做:

如果想看CommonJS与ES6模块化的原理 可以去看我另一篇文章

[秦圆圆]大佬写的 require和import的区别

[大孩子气]大佬写的 require/exports、import/export 的区别

[七分sunshine!]大佬写的# 前端模块化工具 requireJs的使用;

commonjs 与 ES6 模块化

一.commonjs 是什么 

是作用于服务端应用程序,让js程序具有模块化功能的一种语法规范,执行方式是同步且运行时加载,

如何使用:

1.module.exports 导出

定义一个匿名对象,将需要导出的成员 赋值到这个匿名对象上,然后再赋值到module.exports 导出

2.exports 导出

exports在每个模块中扮演着一个对象,如同每次在模块中默认执行了let exports = module.exports,那么exports如何使用导出功能呢,只要在exports对象上声明一个要导出去的属性名,将要导出的值赋值进去,

但不能直接赋值给exports对象,否则就和module.exports没有关系,例如:exports=function fn() {},

导入时拿到的是一个undefind

3.require 导入

导入得到是一个对象,对象里面是导出模块所导出的成员,也可以同结构的方式按需导入

二.ES6模块化

es6模块化也是和commonjs一样是具有将js模块化功能的语法规范,不过只能用于在能识别es6语法浏览器环境,es6模块由两个命令构成:export, import; export 是向外提供输出对外接口,import是使用其他模块向内提供输入接口

1.export

使用export 导出想要导出的值,可以是对象,变量,函数

声明 的同时 且导出

将要导出的值赋值给对象的方式导出

那么以exports导出的模块该如何 导入到其他js文件呢?

1.2 导入模块 语法 import

import 是提供接收对外导入的接口

格式: import 以结构的额方式使用大括号包起来,里面填写按需导入的成员,必须和必须和对应模块导出的成员名一致,如果需要更改成员名,需要使用as关键词, from 对接的模块路径

如果需要把一整个模块的所有对象都导入成一个对象 使用 as 关键词,自定义一个对象名

2.0 export default

同样是和export一样暴露指定的变量或者对象函数

但是导入到 其他模块会稍微方便一些,可以不用像export 需要使用{}接收,直接使用一个自定义的对象名接收即可

commonjs与es6模块化直接的差别

commonjs导出是值的拷贝,es6模块化是导出的值的引用

commonjs加载是运行时加载,而es6模块化是编译时加载会比commonjs更加高效

react+webpack 模块化应该采用CommonJS规范还是ES6规范,为什么

研究react的时候也考虑过这个问题,首先可以先了解下这两种模块的机制。参考这里

要考虑的点:

目前Commonjs是nodejs(浏览器环境需要模块加载器)原生支持的,而es6需要借助babeljs来实现。意味着如果要实现自动编译上线(我司没有在线上安装node_modules做法)可能需要将babel之类的node_modules提交代码仓库,大概45M。

还有要考虑下你选择的react的组件库是基于es6还是Commonjs。如果你业务使用Commonjs规范,组件使用es6,这个就没法统一了。

考虑下团队对es6的熟悉程度,关系到代码质量和维护成本。

暂时就想到这些。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/249304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:33
下一篇 2024-12-12 13:33

相关推荐

发表回复

登录后才能评论