Skip to content

工程化

上次更新 2024年12月24日星期二 6:28:59 字数 392 字 时长 2 分钟

写在前面

模块化 与 包管理器

模块化标准

Commonjs(社区标准)

js
// 定义模块
module.exports = {
  name: "commonjs",
};
js
// 引入模块
const commonjs = require("./commonjs"); // 必须以./、../开头
console.log(commonjs.name);

注意

  • require 引入模块必须以./ ../ 开头
  • 使用 require 引入模块时,模块的导出对象会被缓存,再次引入时,不会重新执行模块代码
  • 一个文件是一个模块
  • 动态依赖
  • 同步引入

ESM(官方标准)

js
// 定义模块
export default {
  name: "esm",
};

export const name = "esm";
js
import esm, { name } from "./esm.js";
console.log(esm.name, name);
html
<script type="module" src="./esm.js" />

注意

  • 静态依赖 使用 import 引入模块
  • 动态依赖 使用 import() 引入模块 返回 Promise

AMD(社区标准)

AMD 英文全称 Async Module Definition 异步模块定义 基本不会在使用了

js
// 定义模块
define(["module"], function (module) {
  return {
    name: "amd",
  };
});
js
// 引入模块
define(["module"], function (module) {
  console.log(module.name);
});
  • require.js 既实现了 AMD 也实现了 CMD

CMD(社区标准)

CMD 英文全称 Common Module Definition 通用模块定义 sea.js(玉伯) 实现了这个方案

js
// 定义模块
define(function (require, exports, module) {
  module.exports = {
    name: "cmd",
  };
});
js
// 引入模块
define(function (require, exports, module) {
  const cmd = require("./module.js");
  console.log(cmd.name);
});

UMD(社区标准 兼容 Commonjs 与 ESM)

常见问题

  1. 为什么浏览器端不使用 commonjs 这种规范
  • 浏览器端不支持同步引入 引入文件比较耗时,需要等待文件加载完成 阻塞页面