zoukankan      html  css  js  c++  java
  • 前端模块化-commonjs,amd,cmd , es6

    模块化历史:

            在es6还未正式发布前,前端模块化,往往都是通过函数式编程实现的,那时候只能这样

    function moduleA(){   // code here...

    }

    function moduleB(){   // code here...

    }

            因为没有块级作用域的概念,

       因为没有块级作用域的概念,前端模拟块状作用域,需要用函数作用域实现,但是为此会产生很多全局变量,污染了命名空间,命名冲突的问题也随之产生,用命名空间实现模块化是一种较好的方案。
            但是实现方式也是千差万别,于是有人提出了的前端模块化规范的概念,

    CommonJS

       又有一些模块的概念涌现出来,比如源自服务器端js模块化的commonjs(一开始叫serverjs);

         CommonJS定义的模块分为:  模块引用(require)    模块输出(exports)       模块标识(module)

         由于commonjs采用同步加载机制,拉取模块依赖的时候会停止页面渲染,于是AMD规范这样的异步加载规范又被提出来,require.js,node.js是其最火的两个实现,nodejs遵循了commonjs规范,但并没有完全的遵循。但是又有国人觉得AMD这种异步加载的方式不太完美,于是司徒正美提出了CMD概念并祭出了其实现sea.js。

            直到2015年ES6正式发布,ECMAScript实现了原生的js模块化,import,export,块状作用域,是其十分常用的模块化的API,但并不是所有浏览器都实现了ES6的支持,由于业界毒瘤IE,尤其是ie8,ie9还占据着大部分市场份额,所以为了兼容ES6的新语法,还得引入第三方打包编译工具,比如babel,broswerify,html5-shim等向下兼容的方案。

           基于nodejs的Grunt,gulp这样的自动化模块和打包工具应运而生,require.js这样的冷兵器,黯然隐退。

           Webpack对上诉两个自动化模块和打包工具都不太满意,果断另起炉灶,获得了好评。

  • 相关阅读:
    (九)栈上分配与逃逸分析
    (八)内存分配策略
    (七)垃圾收集器
    (六)垃圾回收算法
    (五)垃圾回收之判定垃圾对象
    (四)java对象的结构和对象的访问定位
    (三)java虚拟机内存管理和线程独占区和线程共享区
    Spark SQL1.2与HDP2.2结合
    待整理
    Ambari部署HDP:HBase Master启动后自动消失
  • 原文地址:https://www.cnblogs.com/Aladingding/p/6945735.html
Copyright © 2011-2022 走看看