模块化

首先想区分一下,工程化,组件化,模块化的区别,看着感觉都差不多,傻傻分不清楚

  • 工程化与工具化

    工程化==工具化?,工程化并不仅仅于此,我觉得更好的理解是,工程化是一系列标准并由一套标准的工具链具体实现,
    工程化=标准+工具链实现
    工具化,能用工具解决的用工具

  • 模块化与组件化

    这两个概念更容易分不清,因为本来就很模糊,他们的差别体现在颗粒度上,一个button可以是一个模块,组件可以是多个button构成的button组件,类似于零件和一个构件的区别
    模块是按功能划分的单元,一个模块可以是实现某一个功能
    组件可以是由多个模块组成,是可以单独运行系统的最小单元

进入主题,讲讲模块化

模块化的目的

  • 避免命名冲突
  • 便于依赖管理
  • 利于性能优化
  • 提高可维护性
  • 利于代码复用

模块化方案

  • CommonJS

针对的是非浏览器环境下的javascript开发,不适合浏览去环境开发,因为其一,CommonJS只能处理javascript资源,CommonJS引用模块都是同步阻塞式加载,无法实现异步加载模块。

  • AMD/CMD

在CommonJS基础上扩展了几个功能

  • 支持异步加载
  • 可以处理JavaScript以外的资源
  • 源码无需编译就可以运行浏览器环境

ES6 Module

不管时CommonJS,还是AMD/CMD,都存在几个问题

  • 应用场景单一,无法跨环境与运行
  • 构建工具不统一

eS6模块化,是语言层面的规范,跟环境没有关系,可以跨环境运行
虽然也是同步的,但是import()方法可以满足异步加载需求,webpack和babel已经支持
吧盆浏览器没有及兼容ES6 Moduel,需要构建工具进行编译

webpack中模块化构建

webpack支持CommonJS,AMD和ES Module三种,各自有各自的特性

  • CommonJS用于node.js开发,本身不具备异步加载功能,借助webpack提供的API实现

    window.onload = require.ensure([],require=>{
    	const a = require(''./module.js)
    },'chunkname')
    
  • AMD面向浏览器开发,支持异步,但在webpack中蹦年定义输出文件名称,导致AMD异步文件欠缺语义

  • ES Module与CommonJs类似,也不支持异步加载,通过import()函数实现,需要通过特殊注释定义输出模块名称

    window.onload = inmport(
    /*webpackChunkName:"chunkname"*/
    './module.js').then(res=.{
    })
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值