当前位置: 首页 > article >正文

【NPM】工程化依赖包/库开发 之 基础知识2

补充知识点:模块规范 (及格式)
当下主流模块规范:CommonJSAMDUMDCMDESM

模块规范

1. CommonJS

维度内容
特点采用同步加载模块,适合在服务器端使用(如Node.js)。
使用require导入模块,使用module.exports导出模块。
场景主要用于Node.js环境,适合后端开发。
优点简单易懂,适合服务器端的模块化。
缺点不支持异步加载,不适合浏览器环境。
  • 示例:
// module.js - 定义模块
const hello = () => 'Hello, world!';
module.exports = hello;

// main.js - 加载模块
const hello = require('./module');
console.log(hello()); // 输出: Hello, world!

2. AMD

全称:Asynchronous Module Definition -> 异步模块定义

维度内容
特点异步加载模块,适合浏览器环境
使用define定义模块,使用require加载模块。
场景适用于需要异步加载浏览器项目
优点支持异步加载,提高性能。
缺点语法较复杂,配置较多。
  • 示例:
// module.js - 定义模块
define([], function() {
  return function() {
    console.log('Hello from AMD!');
  };
});

// main.js - 加载模块
require(['module'], function(myModule) {
  myModule();
});

3. UMD

全称:Universal Module Definition -> 通用模块定义

维度内容
特点结合了CommonJSAMD,支持多种环境(浏览器Node.js)。
使用(function (root, factory) {...})(this, factory)模式。
场景用于框架,可以在多种环境中使用。
优点灵活,兼容性强。
缺点代码较冗长,增加了复杂性。
  • 示例:
// myLibrary.js
(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    define([], factory);
  } else if (typeof exports === 'object') {
    module.exports = factory();
  } else {
    root.myLibrary = factory();
  }
}(this, function () {
  return function() {
    console.log('Hello from UMD!');
  };
}));

// 使用
const myLibrary = require('./myLibrary');
myLibrary();

4. CMD

全称:Common Module Definition -> 公共模块定义

维度内容
特点异步加载,灵感来自AMD,但更注重依赖的执行顺序。
使用define定义模块,采用惰性加载
场景主要用于Sea.js框架的项目。
优点支持惰性加载,依赖处理更灵活。
缺点生态相对较小,社区支持有限。
  • 示例:
// module.js
define(function(require, exports, module) {
  module.exports = function() {
    console.log('Hello from CMD!');
  };
});

// main.js
define(function(require) {
  var myModule = require('./module');
  myModule();
});

5. ESM (ES Modules)

ES6 moduleES Modules 实际上是指同一种模块化机制

  • ES6 Module: 是对 ECMAScript 2015(也称为 ES6)中引入的模块系统的简称。它包含了importexport语法,用于实现模块化。
  • ES Modules: 是对 ES6 Module正式称呼,通常用于指代现代 JavaScript 中的模块系统。它代表的是一组与模块相关的规范和功能。
维度内容
特点原生支持模块化,使用importexport语法。
支持异步加载,浏览器原生支持
场景现代JavaScript项目,浏览器Node.js都支持。
优点语法简洁,支持静态分析,性能优越。
缺点需要较新版本的浏览器Node.js旧环境不支持
  • 示例:
// module.js
export function greet() {
  console.log('Hello from ES Modules!');
}

// main.js
import { greet } from './module.js';
greet();

http://www.kler.cn/a/376126.html

相关文章:

  • C++之多态(上)
  • Manus在虚拟现实仿真模拟中的应用案例分享
  • 20.04Ubuntu搭建Vscode
  • parted 磁盘分区
  • SpringBoot【实用篇】- 热部署
  • 曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%
  • Web安全: OWASP_TOP_10 原理|危害|绕过技术|修复建议.
  • 本地可以插入表记录,生产不能插入表记录
  • 基于springboot+vue实现的公考知识学习平台 (源码+L文+ppt)4-103
  • 【flutter列表播放器】
  • 基于Spring Boot的网络考试系统设计与实现(源码+定制+开发)网络考试管理平台、智能考试评估系统、题库管理系统设计、Spring Boot考试平台开发
  • 数字IC后端实现之Innovus Place跑完density爆涨案例分析
  • stable diffusion webui API调用示例,调用参数,override_settings参数
  • 时光书屋--
  • 标签之文字排版,图片,链接,音视频(HTML) 基础版
  • 4、liunx开机启动详解
  • 信息学科平台设计与实现:Spring Boot技术详解
  • 【Android】常见问题集锦
  • 112. gui辅助调节光源阴影
  • 浅谈鸿蒙生态崛起的机遇
  • LeetCode647:回文子串
  • 大规模语言模型:从理论到实践(1)
  • Python 工具库每日推荐 【Sphinx】
  • 李飞飞团队新突破:低成本高泛化机器人训练法,零样本迁移成功率90%!
  • 【AI开源项目】FastGPT- 深入解析 FastGPT 的知识库逻辑与检索机制:让 AI 更聪明的秘密
  • 20+款数据库DBA常用工具,助你高效管理