模块规范:AMD、CMD、ESM 、CommonJS

2022-07-05  本文已影响0人  青城墨阕
前言

对前端模块化规范做的一点笔记

什么是模块化?

或根据功能、或根据数据、或根据业务,将一个大程序拆分成互相依赖的小文件,再用简单的方式拼装起来。

模块化要解决的问题:

AMD

require(['./math', './utils'], function (math, utils) {
    math.add(2, 3);
    utils.request();
});

CMD

// AMD
// 依赖必须一开始就写好
// AMD 也支持依赖就近,但 RequireJS 作者和官方文档都是优先推荐依赖前置写法。
define(['./utils'], function(utils) {
  utils.request();
});

// CMD
define(function(require) {
  // 依赖可以就近书写
  var utils = require('./utils');
  utils.request();
});

CommonJS

前面说了, AMD、CMD 主要用于浏览器端,随着 node 诞生,服务器端的模块规范 CommonJS 被创建出来。

// 暴露模块:
const students = {};
const teachers = {};
module.exports = {
    students,
    teachers
};

// 引用模块:
// 引用的整个模块会初始化为一个Module对象;
const { teachers } = require('./info.js'); 

模块内 module、exports、module.exports、require() 的含义:

ESM(ES6 module)

AMD 、 CMD 等都是在原有JS语法的基础上二次封装的一些方法来解决模块化的方案,ES6 module(在很多地方被简写为 ESM)是语言层面的规范,ES6 module 旨在为浏览器和服务器提供通用的模块解决方案。长远来看,未来无论是基于 JS 的 WEB 端,还是基于 node 的服务器端或桌面应用,模块规范都会统一使用 ES6 module。

// 导出
// config.js
const prefix = 'https://github.com';
const api = `${prefix}/ronffy`;
export {
  prefix,
  api,
}
// 导入
import { api as myApi } from './config.js';

使用import()实现按需加载:

function foo() {
  import('./config.js')
    .then(({ api }) => {

    });
}

const modulePath = './utils' + '/api.js';
import(modulePath);





参考文献:
https://fe.ecool.fun/topic/8ecafda7-0ae6-40bd-b8c6-385d02fa7165?orderBy=updateTime&order=desc&tagId=10
https://juejin.cn/post/7003285499628486670

上一篇 下一篇

猜你喜欢

热点阅读