【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.mzph.cn/diannao/58912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cisco Packet Tracer 8.0 路由器的基本配置和Telnet设置

文章目录 构建拓扑图配置IP地址配置路由器命令说明测试效果 构建拓扑图 1,添加2811路由器。 2,添加pc0。 3,使用交叉线连接路由器和pc(注意线路端口)。 4,使用配置线连接路由器和pc(注意线路…

Python实现全国岗位招聘信息可视化分析(源码+论文+部署讲解)

项目源码&数据源获取 利用Python实现全国岗位招聘信息可视化分析 项目背景: 1.为企业招聘决策提供科学的依据和参考,可以帮助人力资源部门、招聘机构和求职者了解当前的就业形势、行业趋势和人才需求,从而做出更明智的招聘和求职决策。…

(九)JavaWeb后端开发3——Servlet

目录 1.Servlet由来 2.Servlet快速入门 3.Servlet执行原理 4.Servlet生命周期 1.Servlet由来 在JaveEE API文档中对Servlet的描述是:可以运行在服务器端的微小程序,但是实际上,Servlet就是一个接口,定义了Java类被浏览器访问…

C++设计模式结构型模式———桥接模式

文章目录 一、引言二、桥接模式三、总结 一、引言 桥接(Bridge)模式也叫桥梁模式,简称桥模式,是一种结构型模式。该模式所解决的问题非常简单,即根据单一职责原则,在一个类中,不要做太多事&…

【android12】【AHandler】【4.AHandler原理篇ALooper类方法全解】

AHandler系列 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客 【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客 【android12】【AHandler】【3.AHandler原理篇AHandler类方法全解】-CSDN博客 其他系列 本人系列文章-CSDN博客…

基于SSM志愿者招募系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,志愿组织管理,组织信息管理,组织申请管理,志愿活动管理活动报名管理 用户账号功能包括:系统首页,个人中心,…

selinux介绍和Linux中的防火墙

selinux 1、selinux的说明 2、selinux的工作原理 3、selinux的启动、关闭与查看 防火墙 1、什么是防火墙 2、iptables (1)iptables介绍 参数说明 3、firewalld firewalld-cmd的参数说明

mysql8 window 免安装

CMD 必须是管理员权限 D:\Tube11\mysql-8.0.40-winx64\bin>mysqld remove mysql mysql8 The service doesnt exist! D:\Tube11\mysql-8.0.40-winx64\bin>mysqld remove mysql8 Service successfully removed. D:\Tube11\mysql-8.0.40-winx64\bin>mysqld --initializ…

RHCE4

一、web服务器简介 1、什么是www www 是 world wide web 的缩写,也就是全球信息广播的意思。通常说的上网就是使用 www 来查询用户所需要的信息。 www 可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方式将信息以 Internet 传…

【多模态RAG】多模态RAG ColPali实践

关于【RAG&多模态】多模态RAG-ColPali:使用视觉语言模型实现高效的文档检索前面已经介绍了(供参考),这次来看看ColPali实践。 所需权重: 多模态问答模型:Qwen2-VL-72B-Instruct,https://mo…

推荐一款用来快速开发3D建筑模型软件:Allplan

Nemetschek Allplan是一款用来快速开发3D建筑模型软件的软件,它的简单好用但是功能强大,绝对不输AuToDesk,而且人性化的设计更让你可以快速的建立开发及维护你的建筑模型。是与ArchiCAD称兄道弟的强大建筑设计软件,功能上互有短长…

Python面向对象,实现图片处理案例,支持:高斯模糊、Canny边缘检测、反转边缘图像、生成手绘效果、调亮度......等等

实验图片如下: 命名为img1.jpg, 放在项目下新建文件夹images下 项目构造如下: app.py源码如下 import cv2 import os from matplotlib import pyplot as plt import numpy as npclass ImageProcessor:def __init__(self, image_path):self.image cv…

利用LangChain与LLM打造个性化私有文档搜索系统

我们知道LLM(大语言模型)的底模是基于已经过期的公开数据训练出来的,对于新的知识或者私有化的数据LLM一般无法作答,此时LLM会出现“幻觉”。针对“幻觉”问题,一般的解决方案是采用RAG做检索增强。 但是我们不可能把…

美定制!用Vue的:deep选择器轻松覆盖第三方组件样式

序言 在使用Vue开发时,第三方组件库往往自带样式。虽然这些样式简化了我们的开发工作,但它们默认的设计可能不完全符合项目风格。当你尝试修改这些样式时,可能会遇到Scoped样式的“保护”,让我们很难覆盖组件内部的样式。 Vue中…

YOLOv11改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块

一、本文介绍 本文记录的是利用H-RAMi模块优化YOLOv11的目标检测网络模型。H-RAMi结合了对来自分层编码器阶段的多尺度注意力的处理能力和对语义信息的利用能力,有效地补偿了因下采样特征导致的像素级信息损失。本文将其应用到v11中,并进行二次创新,使网络能够在处理具有复…

C++ 基础语法 一

C 基础语法 一 文章目录 C 基础语法 一const 限定符常量指针类型别名autodecltypeQStringvector迭代器指针和数组显示转换static_castconst_cast 函数尽量使用常量引用数组形参不要返回局部对象的引用和指针返回数组指针 C四种转换内联函数constexpr函数函数指针 const 限定符 …

tensorflow案例4--人脸识别(损失函数选取,调用VGG16模型以及改进写法)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 这个模型结构算上之前的pytorch版本的,算是花了不少时间,但是效果一直没有达到理想情况,主要是验证集和训练集准确率…

力扣每日一题 超级饮料的最大强化能量 动态规划(dp)

来自未来的体育科学家给你两个整数数组 energyDrinkA 和 energyDrinkB,数组长度都等于 n。这两个数组分别代表 A、B 两种不同能量饮料每小时所能提供的强化能量。 你需要每小时饮用一种能量饮料来 最大化 你的总强化能量。然而,如果从一种能量饮料切换到…

全国产 V7 690T+FT6678 高性能实时信号处理平台设计原理

1、概述 全国产 V7 690TFT6678 高性能实时信号处理平台组成如图 1 所示,包含 1 片SMQ7VX690TFFG1761 和两片 FT-6678(国防科大)的 DSP,总共 3 个主芯片;每个主芯片外部各搭配 1 组 64bit 的 DDR3 内存模组以及各芯片启…

0.STM32F1移植到F0的各种经验总结

1.结构体的声明需放在函数的最前面 源代码: /*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //开启USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructu…