模块化

模块化

 模块化已经是现代前端开发中不可或缺的一部分了
 模块化:把复杂的问题分解成相对独立的模块
 模块化的作用:降低程序复杂性,提高代码的重用,也有利于团队协作开发与后期的维护和扩展
 模块化的核心:1.独立的作用域(
        2.如何导出模块内部数据
        3.如何导入外部模块数据

模块化的向下兼容
一、ESM

 从 ECMAScript2015/ECMAScript6 开始JavaScript 原生引入了模块的概念,我们称为:ECMAScript Module,简称:ESM,现在主流浏览器也都有了很好的支持
1.独立的作用域
  一个文件就是模块,拥有独立的作用域,且导出的模块都自动处于 严格模式下,即:'use strict')
2.导出模块内部数据
  使用export语句导出模块内部数据
在这里插入图片描述
注意:1.export default 向外暴露的成员,可以使用任意变量来接收
   2.在一个模块中,export default 只允许向外暴露一次
   3.在一个模块中,可以同时使用export defaultexport 向外暴露成员
   4.使用export向外暴露的成员,只能使用{ }的形式来接收,且必须严格按照导出时候的名称,
    这种形式,叫做按需导出
3.导入外部模块数据
  导入分为静态导入和动态导入
  静态导入
  在浏览器中,import 语句只能在声明了 type="module" 的 script 的标签中使用
  <script type='module' src=''></script>
  静态导入方式不支持延迟加载,import 必须在模块的最开始
在这里插入图片描述
动态导入
 有一个类似函数的动态 import(),它不需要依赖 type="module" 的 script 标签
 可以像调用函数一样来动态的导入模块,以这种方式调用,将返回一个 promise
 使用script标签时,可以直接使用<script src=''></script>
在这里插入图片描述

二、CommonJS

 在早起前端对于模块化并没有什么规范,反而是偏向服务端的应用有更强烈的需求,CommonJS 规范就是一套偏向服务端的模块化规范,NodeJS 就采用了这个规范
1.独立的作用域
  一个文件就是模块,拥有独立的作用域
2.导出模块内部数据
  通过 module.exportsexports 对象导出模块内部数据
在这里插入图片描述
3.导入外部模块数据
  通过 require 函数导入外部模块数据
在这里插入图片描述

三、AMD

 因为 CommonJS 规范一些特性(基于文件系统,同步加载),它并不适用于浏览器端,所以另外定义了适用于浏览器端的规范
 浏览器并没有具体实现该规范的代码,我们可以通过一些第三方库来解决在浏览器端模块化的规范 这种方式就是AMD
 通过requirejs这个第三方库来规范
<script data-main="scripts/main" src="https://cdn.bootcss.com/require.js/2.3.6/require.min.js"></script>
data-main绑定当前的主入口,是优先读取的文件
1.独立模块作用域
  通过一个 define 方法来定义一个模块,并通过该方法的第二个回调函数参数来产生独立作用域
2.导出模块内部数据
  通过 return 导出模块内部数据
  使用define 导出 时,需要返回值,不需要参数
在这里插入图片描述
3.导入外部模块数据
  通过前置依赖列表导入外部模块数据
  使用define方法导入时,需要参数,不需要返回值
  参数1:导入的路径,(数组,因为可以导入多个)
  路径:从导入的html文件出发
  参数2:外部导入的数据会以参数的形式传入函数中
在这里插入图片描述

四、UMD

 严格来说,UMD 并不属于一套模块规范,它主要用来处理 CommonJSAMDCMD 的差异兼容,是模块代码能在前面不同的模块环境下都能正常运行
 使用闭包的方式处理模块化兼容的问题
导出模块内部数据
在这里插入图片描述导入外部模块数据
 与原先的导入方式一样

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值