前端模块化( CommonJS、AMD、CMD、UMD、ES Module) 详解

15 篇文章 0 订阅
2 篇文章 0 订阅

1.CommonJS

  • CommonJS是2009年社区提出的最早的模块标准
  • Node.js采用的是CommonJS标准的一部分,并在此基础上做了一些变化。

申明方式

    modele.exports.name = 'hello word';
  module.exports.sayHello = function() {
      console.log('Hello ');
  };

exports 是与外界联系的桥梁不可以直接复制,以下为错误方式

  module.exports = {
      sayHello () {
          console.log('Hello ');
      }
  }

引用方式

var sayHello = require('module');
   sayHello();

参考

2.AMD

申明

//    filename: foo.js
define(['jquery'], function ($) {
    //    methods
    function myFunc(){};

    //    exposed public methods
    return myFunc;
});

3.UMD

UMD,全称 Universal Module Definition,即通用模块规范,
兼容了 commonjs 和 AMD规范

jqery UMD定义代码

(function (factory) {
      if (typeof define === 'function' && define.amd) {
      // AMD. Register as an anonymous module.
      define(['jquery'], factory);
  } else if (typeof module === 'object' && module.exports) {
      // Node/CommonJS
  module.exports = function( root, jQuery ) {
      if ( jQuery === undefined ) {
      // require('jQuery') returns a factory that requires window to
      // build a jQuery instance, we normalize how we use modules
      // that require this pattern but the window provided is a noop
      // if it's defined (how jquery works)
  if ( typeof window !== 'undefined' ) {
      jQuery = require('jquery');
  }
  else {
      jQuery = require('jquery')(root);
      }
  }
      factory(jQuery);
      return jQuery;
      };
  } else {
  // Browser globals
      factory(jQuery);
      }
  }(function ($) {
      $.fn.jqueryPlugin = function () { return true; };
     }));

4. ES Modules

ES6 推出的模块化标准

ES Modules 的模块化能力由export 和import 组成,export 命令用于规定模块的对外接口,import 命令用于输入其他模块提供的功能。我们可以这样定义一个模块:
申明

// 第一种方式
      export var firstName = 'Michael';
      export var lastName = 'Jackson';
      export var year = 1958;
// 第二种方式
      var firstName = 'Michael';
      var lastName = 'Jackson';
      var year = 1958;
      export { firstName, lastName, year };

引用

import { firstName, lastName, year } from 'module';
import { firstName as newName } from 'module';
import * as moduleA from 'module';

参考文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值