• CJS,AMD,UMD和ESM


    JS中加入了模块的概念。其中就有CJS,AMD,UMD,ESM这些模块的出现。

    • CJS
      cjs是common js的缩写,它的代码语法长这个样子:

    1. // importing
    2. const doSomething = require('./doSomething.js')
    3. // exporting
    4. module.exports = function doSomething(n) {
    5. // do something
    6. }

    你们或许对CJS的语法很熟悉,因为node用的就是CJS的模块方式。
    CJS是同步引入模块的
    可以从库中引入或者从本地某个文件夹中引入。

    1. const myLocalModule = require('./some/local/file.js');
    2. const React = require('react');

    用CJS引入的是要引入对象的一个拷贝
    CJS在浏览器环境中是无效的,它必须要经过编译和打包后才能在浏览器环境中执行。

    AMD
    AMD是asynchronous module definition 的缩写。

    1. define(['dep1', 'dep2'], function (dep1, dep2) {
    2. // define the module value by returning a value.
    3. return funtion () {};
    4. })
    5. // or simplified CommonJS wrapping
    6. define(function (require) {
    7. var dep1 = require('dep1'),
    8. dep2 = require('dep2');
    9. return function () {};
    10. })

    AMD是异步加载模块的。(就像它的名字一样)
    AMD设计出来是供前端使用的,而CJS刚开始设计的目的是供后端使用的。
    AMD的语法没有CJS那样直观。

    • UMD
      UMD是Universal Module Definition的缩写。它的语法是:

    1. (function (root, factory) {
    2. if (typeof define === 'function' && define.amd) {
    3. define(['jquery', 'underscore'], factory);
    4. } else if (typeof exports === 'objects') {
    5. module.exports = factory(require('jquery'), require('underscore'));
    6. } else {
    7. root.Requester = factory(root.$, root._);
    8. }
    9. })(this, function ($, _) {
    10. // this is where I defined my module implementation
    11. var Requester = {// ... };
    12. return Requester;
    13. })

    适用于前端和后端环境(所以取名为universal)
    跟CJS,AMD不同的是,UMD更像是一种模式,去适配多种模块系统。
    当用像rollup/webpack这样的打包器的时候,UMD通常用作一个回调模块。

    • ESM
      ESM是ES 模块的缩写。是JS语言为了标准化模块系统的一种方案。它的语法形式:

    1. import React from 'react';
    2. export default function() {
    3. // your function
    4. }
    5. export const function1() {}
    6. export const function2() {}

    多种主流浏览器兼容。
    具有类似CJS那样的简单的语法以及AMD的异步加载的功能。
    具有Tree-shakeable的特性,这是由于ES6的静态模块结构。
    rollup这样的打包器在打包ESM的时候,会除去冗余的代码,这样网站就可以加载更少的代码已加快加载速度。
    可以在html代码中使用

    总结:

    ESM由于具有简单的语法,异步加载的特性,以及Tree-shakeable的特性,因此被广泛使用。
    UMD可以在任何环境下使用,并且在ESM不能使用的情况下会选择UMD。
    CJS是同步的,适用于后端环境。
    AMD是异步的,适用于前端环境。

  • 相关阅读:
    使用Mybatis数据库逆向生成工具
    总结1008
    婚恋同城交友系统源码,相亲交友app源码,原生开发uni+php,确保系统兼容性
    汽车称重软件的秤台和车辆管理有哪些要求(二)
    vue中使用MINIO将文件上传到指定的bucket库中(vue2和vue3)
    Android技能树-进程-进程名称
    spring boot项目如何采用war在tomcat容器中运行呢?
    YOLOv5算法改进(22)— 更换主干网络MobileNetv3 + 添加CA注意力机制
    Beats Studio Buds 连接 Windows 11 声音输出不显示设备
    创新实战|从5大维度成功实现传统研发向敏捷研发转型
  • 原文地址:https://blog.csdn.net/dualvencsdn/article/details/125488259