zoukankan      html  css  js  c++  java
  • JS模块化简介(读书笔记)

    简单记录JS模块化,主要存在以下几类。

    一、CommonJS

    诞生于Node社区,只能在服务端使用;

    特点:一个文件为一个模块,通过module.exports方式暴露出模块接口,通过require方式引用;

    由于在node环境中引用,相当于引用本地文件,属于同步执行方式;

    CommonJS代码示例:

    var EventEmitter = require('events').EventEmitter;

    var mixin = reuqire('merge-descriptors');

    var Route = require('./router');

    exports = module.exports = createApplication; // 对外暴露该方法

    二、AMD

    Async Module Definition;

    使用define定义模块;

    使用require加载模块;

    AMD规范代表 RequireJS;

    特点:依赖前置,提前执行;

    AMD代码示例:

    define(

      'alpha', // 模块名, 模块名称可省略

      ['require', 'exports', 'beta'], // 依赖

      // 模块输出

      function (require, export, beta) {

        exports.verb =  function() {

          return beta.verb();

          // 或者

          return require('beta').verb();

      }

    );

    三、CMD

    全称: Common Module Definition

    特点为: 一个文件为一个模块, 尽可能的懒执行;

    定义方式: 使用define来定义一个模块;

    使用方式:通过require来加载一个模块;

    CMD规范代表:SeaJS

    CMD代码示例:

    define(function(require, exports, module) {

      var $ = require('jquery);

      var Spining = require('./spinning');

      使用exports.doSomething = ...

      或module.exports = ...

    });

    四、UMD

    UMD全称为: Universal Module Definition;

    是一个通用解决方案

    UMD实质为做了三件事

      1.判断是否支持AMD;

      2.判断是否支持CommonJS

      3.如果都没有,则使用全局变量

    UMD代码示例:

    (function (root, factory) {

      if  (typeof define === 'function' && define.amd) {

        // 如果满足AMD规范,则使用AMD规范 

        define([], factory);

      }  else if (typeof exports === 'object') {

        // 判断是否满足CommonJS

        module.exports = factory();

      } else {

        root.returnExports = factory();

      }

    }(this, function() {

      return {};

    });

    五、ES6 module

    EcmaScript Module

    一个文件一个模块;

    通过export暴露,import 引入;

    代码示例:

    import theDefault, {named1, named2} from 'src/mylib';

    export const Test = ‘test’

    export default Named = 'Named';

    ps: webpack 支持三种类型: AMD, ES Modules(推荐), CommonJs

  • 相关阅读:
    spring中bean的生命周期
    【数据结构与算法】2.2 数组实现循环队列思路、代码
    【数据结构与算法】2.1、数组队列场景、思路、实现
    【Java 基础领域】手气红包实现思路、代码
    【数据结构与算法】1、稀疏数组场景、思路、代码实现
    【Java基础领域】 byte num = 100 没有强制类型转换,为什么也可以编译通过
    【程序人生】程序员发展的7大方向
    【读书笔记】老许的架构
    对于开发中为什么很少用设计模式的思考
    Java编程思想目录
  • 原文地址:https://www.cnblogs.com/lzj0824/p/8552282.html
Copyright © 2011-2022 走看看