关于javascript:JS模块化系统

37次阅读

共计 1418 个字符,预计需要花费 4 分钟才能阅读完成。

JS 模块化零碎

随着 JavaScript 开发变得越来越宽泛,命名空间和依赖关系变得越来越难以解决。人们曾经开发出不同的解决方案以模块零碎的模式来解决这个问题。

CommonJS(CJS)

CommonJS 是一种同步加载模块的标准,次要用于服务器端的 Node.js 环境。

// 模块导出
module.exports = {// 模块内容};

// 模块导入
const module = require('module');

top:CommonJS 加载的是一个对象(即 module.exports 属性),该对象只有在脚本运行完才会生成。

AMD(Asynchronous Module Definition)

AMD 是一种_异步_加载模块的标准,次要用于浏览器端的 JavaScript 开发。它容许模块在加载实现后立刻执行,而不会阻塞页面加载。

// 模块定义
define(['dependency1', 'dependency2'], function (dependency1, dependency2) {
  // 模块内容
  return {// 模块导出内容};
});

// 模块加载
require(['module'], function (module) {// 模块加载实现后执行的逻辑});

UMD(Universal Module Definition)

UMD 是一种通用的模块定义格局,旨在兼容 CommonJSAMD 以及全局变量导出的形式。

实现原理为:先判断是否反对 node.js 的模块,存在就应用 node.js;再判断是否反对AMDdefine 是否存在),存在则应用 *
AMD的形式加载。这就是所谓的UMD*。

(function (root, factory) {if (typeof define === 'function' && define.amd) {
    // AMD
    define(['exports', 'module'], factory);
  } else if (typeof exports === 'object' && typeof module === 'object') {
    // CommonJS
    factory(exports, module);
  } else {
    // 浏览器环境下裸露到全局变量
    factory((root.myModule = {}), root.myModule);
  }
})(this, function (exports, module) {// 模块内容});

UMD 本质上创立了一种应用两者之一的办法,同时还反对全局变量定义。因而,UMD 模块可能在客户端和服务器上工作。

ESM(ES Module)

ESMECMAScript 官网提供的模块规范,反对异步加载,具备动态导入和导出,使得代码更具可靠性和可预测性。

// 模块导出
export const module = {// 模块内容};

// 模块导入
import {module} from 'module';

概括

不同的模块标准各有优劣,抉择适合的标准取决于我的项目的需要和指标平台。

  • CJS 为同步加载,次要用于服务器端编程,因为在服务器端加载速度不太重要,而且同步加载更容易了解和治理。
  • AMD 为异步加载,实用于浏览器环境中的异步模块加载,尤其是在 Web 利用中采纳模块化开发时应用。
  • UMD 为通用形,通常用作 ESM 不起作用时的后备计划,实用于同时在浏览器和 Node.js 环境中应用的代码,使得代码具备更大的通用性。
  • ESM 实用于古代浏览器以及反对 ES6 模块的 Node.js 版本,使得代码更具可维护性和可移植性。

正文完
 0