JS通用模块模式 UMD

历史

JS诞生之初面向简单页面开发, 没有模块的概念。

后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块;

之前也有雅虎的实践,使用命名空间 作为模块名。

最后衍生出 面向各种使用场景 的 JS 模块标准。

例如:

面向浏览器的 AMD

面向Nodejs的 CommonJS

对于这种分裂状态ES标准也在尽力弥合。 但是目前流行的实践是 UMD模式。

 

AMD

https://www.davidbcalhoun.com/2014/what-is-amd-commonjs-and-umd/

 

Asynchronous Module Definition (AMD) has gained traction on the frontend, with RequireJS being the most popular implementation.

Here’s module foo with a single dependency on jquery:

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

And a little more complicated example with multiple dependencies and multiple exposed methods:

//    filename: foo.js
define(['jquery', 'underscore'], function ($, _) { // methods function a(){}; // private because it's not returned (see below) function b(){}; // public because it's returned function c(){}; // public because it's returned // exposed public methods return { b: b, c: c } }); 

 

CommonJS<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript模块化指的是将代码分割成可重用的、独立的模块,以便提高代码的可维护性、可重用性和可扩展性。模块化在前端开发中扮演着非常重要的角色。 CMD和AMD是两种常用的JavaScript模块化规范,它们都允许模块化编程,但它们的实现方式略有不同。 1. CMD(Common Module Definition) CMD是一种JavaScript模块化规范,它是由阿里前端开发玉伯提出的。CMD规范的实现工具有Sea.js、RequireJS等。CMD规范的特点是延迟执行,即模块在require时才会执行,不会立即执行。其语法如下: ```javascript define(function(require, exports, module) { // 模块代码 }); ``` 2. AMD(Asynchronous Module Definition) AMD也是一种JavaScript模块化规范,它是由Dojo的前端开发者提出的。AMD规范的实现工具有RequireJS等。AMD规范的特点是提前执行,即模块在define时就会执行,而不是等到require时才执行。其语法如下: ```javascript define(['module1', 'module2'], function(module1, module2) { // 模块代码 }); ``` 3. UMD(Universal Module Definition) UMD是一种通用模块定义规范,它可以在AMD和CommonJS规范之间进行切换,适用于多种JavaScript环境。其语法如下: ```javascript (function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery'], factory); } else if (typeof exports === 'object' && typeof module === 'object') { // CommonJS module.exports = factory(require('jquery')); } else { // Browser globals root.returnExports = factory(root.jQuery); } }(this, function ($) { // 模块代码 })); ``` 以上三种模块化规范都有其各自的优缺点,选择适合自己的规范进行开发即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值