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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CommonJS与ES6模块化的具体使用方式相关的知识,希望对你有一定的参考价值。

参考技术A

所以:只需要将需要暴露给外部的变量或者方法 设置为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 模块化

参考技术A 一.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更加高效

以上是关于CommonJS与ES6模块化的具体使用方式的主要内容,如果未能解决你的问题,请参考以下文章

ES6模块与CommonJS模块的差异

前端模块-ES6与commonJS区别

ES6 模块与 CommonJS 模块的差异

聊聊CommonJS与ES6 Module的使用与区别

ES6与 CommonJS 模块化的区别

ES6 模块与 CommonJS 模块的差异