js 模块化基础和模块规范AMD、CMD、ES6模块

简介: js 模块化基础和模块规范AMD、CMD、ES6模块

一、模块基础

1、基于文件的模块化

把相关函数写在一个文件里


<script>
  function func1() {
    //   ...
  }
  function func2() {
    //   ...
  }
</script>

缺点:污染了全局变量,无法保证不与其他模块发生变量名冲突


2、基于对象的模块化

把所有的模块成员封装在一个对象中


<script>
  var myModule = {
    name: "Tom",
    func: function () {},
  };
</script>

优点:避免了变量污染,只要保证模块名唯一即可


缺陷:外部可以随意修改内部成员


3、基于函数的模块化

通过立即执行函数返回对象


<script>
  var myModule = (function () {
    var name = "Tom";
    function func() {}
    return {
      name: name,
      sayHello: sayHello,
    };
  })();
</script>

优点:模块外部无法修改我们没有暴露出来的变量、函数


二、JavaScript 模块规范

其中【基于函数的模块化】是模块化的基础


目前,通行的 JavaScript 模块规范主要有两种:CommonJS 和 AMD


1、Node.js 实现 CommonJS

定义模块:一个文件就是一个模块,有单独的作用域

模块输出:要导出的内容放入 module.exports 对象

加载模块:require 返回 module.exports 对象

eg:


定义模块


// a.js
function func() {
  console.log("func");
}
module.exports = {
  func: func,
};

加载模块

// b.js
const myModule = require("./a");
myModule.func();

以上方法浏览器不直接支持


2、AMD 异步模块定义

Asynchronous Module Definition


由 require.js 支持


文档:https://requirejs.org/


实现接口:


// 定义模块
define(id?, dependencies?, factory);
id:模块的标识,默认脚本文件名
dependencies:当前模块依赖的模块名称数组
factory:模块初始化要执行的函数或对象
// 加载模块
require(dependencies, callback);
dependencies: 所依赖的模块数组
callback: 前面指定的模块都加载成功后的回调函数

eg:


1、下载


wget https://cdn.bootcdn.net/ajax/libs/require.js/2.3.6/require.min.js

2、helper.js 定义模块


// 模块名,模块依赖,模块的实现function
define(function () {
  return {
    func: function () {
      console.log("hello");
    },
  };
});

2、app.js 引入模块


require(["helper"], function (helper) {
  helper.func();
});

3、index.html 浏览器中使用


<script src="require.min.js" data-main="app.js"></script>

3、CMD 通用模块定义

Common Module Definition


由 Sea.js 支持


文档:https://seajs.github.io/seajs/docs/#intro


实现接口


// 定义模块
define(id?, deps?, factory)
一般不在define的参数中写依赖
factory = function(require, exports, module)
require 用来获取其他模块提供的接口:require(id)
exports 用来向外提供模块接口
module 存储了与当前模块相关联的一些属性和方法

eg:


1、下载


wget https://cdn.bootcdn.net/ajax/libs/seajs/3.0.3/sea.js

2、helper.js 定义模块


define(function (require, exports, module) {
  exports.func = function () {
    console.log("hello");
  };
});

3、app.js 引入模块


define(function (require, exports, module) {
  var helper = require("helper");
  helper.func();
});

4、index.html 浏览器中使用


<script src="sea.js"></script>
<script>
  seajs.use("app");
</script>

4、AMD 与 CMD 区别

AMD 推崇依赖前置,在定义模块的时候就要声明其依赖的模块

CMD 推崇就近依赖,只有在用到某个模块的时候再去 require

三、ES6 模块

1、ES6 模块与 CommonJS 模块的差异

image.png


arguments
require
module
exports
__filename
__dirname

2、模块加载

1、传统方法

<!-- 页面内嵌的脚本 -->
<script type="application/javascript">
  // module code
</script>
<!-- 外部脚本 -->
<script type="application/javascript" src="demo.js"></script>

浏览器脚本的默认语言是 JavaScript,因此 type="application/javascript"可以省略


默认情况下,浏览器是同步加载 JavaScript 脚本,执行完脚本,再继续向下渲染


2、异步加载脚本


<!-- 渲染完再执行 -->
<script src="demo.js" defer></script>
<!-- 下载完就执行 -->
<script src="demo.js" async></script>

3、ES6 加载


<script type="module" src="./foo.js"></script>
<!-- 等同于 -->
<script type="module" src="./foo.js" defer></script>

eg:

模块文件 demo.js


export default function () {
  console.log("demo");
}

主文件 index.html


<script type="module">
  import Demo from "./demo.js";
  Demo();
</script>

参考


前端模块化,AMD 与 CMD 的区别

Module 的加载实现

相关文章
|
20天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
32257 117
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
9天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4734 4
|
15天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6834 18
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
14天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4803 11
|
16天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5682 21
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
12天前
|
人工智能 JavaScript 安全
Claude Code 安装指南
Claude Code 是 Anthropic 推出的本地 AI 编程助手,支持 Mac/Linux/WSL/Windows 多平台一键安装(Shell/PowerShell/Homebrew/NPM),提供 CLI 交互、代码生成、审查、Git 提交等能力,并内置丰富斜杠命令与自动更新机制。
4293 0
|
16天前
|
存储 人工智能 机器人
OpenClaw是什么?阿里云OpenClaw(原Clawdbot/Moltbot)一键部署官方教程参考
OpenClaw是什么?OpenClaw(原Clawdbot/Moltbot)是一款实用的个人AI助理,能够24小时响应指令并执行任务,如处理文件、查询信息、自动化协同等。阿里云推出的OpenClaw一键部署方案,简化了复杂配置流程,用户无需专业技术储备,即可快速在轻量应用服务器上启用该服务,打造专属AI助理。本文将详细拆解部署全流程、进阶功能配置及常见问题解决方案,确保不改变原意且无营销表述。
6257 6
|
18天前
|
人工智能 JavaScript 应用服务中间件
零门槛部署本地AI助手:Windows系统Moltbot(Clawdbot)保姆级教程
Moltbot(原Clawdbot)是一款功能全面的智能体AI助手,不仅能通过聊天互动响应需求,还具备“动手”和“跑腿”能力——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可接入Qwen、OpenAI等云端API,或利用本地GPU运行模型。本教程专为Windows系统用户打造,从环境搭建到问题排查,详细拆解全流程,即使无技术基础也能顺利部署本地AI助理。
7769 17