js模块化CJS、AMD、CMD、UMD、ESM、IIFE理解

这篇具有很好参考价值的文章主要介绍了js模块化CJS、AMD、CMD、UMD、ESM、IIFE理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JS模块化

        JavaScript模块化编程是指将JavaScript代码分割成独立的模块,每个模块都有自己的作用域和接口,可以按需加载和使用。这样可以避免全局变量污染,提高代码的可维护性和可重用性。在ES6之前,JavaScript并没有一个统一的模块化规范,开发人员通常使用CommonJS或AMD等第三方库来实现模块化编程。

背景

        从四个维度来分析下js模块化,同步异步加载、变量的深浅拷贝、适用范围、代码表现。

        针对于深浅拷贝来说,module.exports+require这样的操作就是浅拷贝可以共享内存,对于export import这样的操作就是深拷贝这个可以看之前的博客。

        使用了rollup打包了umd。

CJS(commonjs)

同步异步加载:同步
适用范围:nodejs
代码表现:

// a.js
module.exports = {
    boo: 10
}

// b.js
const {boo} = require('a.js')
console.log(boo)

AMD

同步异步加载::异步
适用范围:nodejs、配合reqirejs可以在浏览器中使用
代码表现:参考umd代码

define(["exports"], factory);

CMD

同步异步加载:同步
适用范围:nodejs和配合reqirejs可以在浏览器中使用
代码表现:参考umd代码

define(function(require, exports, module) {
    exports.a = 10
    factory(exports);
});

UMD

同步异步加载:同步
适用范围:nodejs和浏览器
代码表现:兼容了commonjs、cmd、amd

(function (global, factory) {
  if (typeof exports === "object" && typeof module !== "undefined") {
	// commonjs
    factory(exports);
  } else if (typeof define === "function" && define.amd) {
	// amd
    define(["exports"], factory);
  } else if (typeof define === "function" && define.cmd) {
	// cmd
	define(function(require, exports, module) {
        exports.a = 10
		factory(exports);
	});
  } else {
	// 没有环境
    (global = typeof globalThis !== "undefined" ? globalThis : global || self),
      factory((global.umd = {}));
  }
})(this, function (exports) {
  "use strict";

  console.log(3424221233);
  var sum = function sum(a, b) {};

  exports.sum = sum;

  Object.defineProperty(exports, "__esModule", { value: true });
});

ESM

同步异步加载:异步
适用范围:浏览器(随着浏览器的发展,可以在script的标签中加入type="module"来支持)和nodejs(Node verison 13.2.0,有两种方式1:package.json中填写type: "modules",2.将文件结尾命名为mjs)
代码表现:

// a.js
let boo = 10
export default boo

// b.js
import boo from "boo"
console.loG(boo)

IIFE(立即执行函数)

同步异步加载:同步
适用范围:nodejs和浏览器
代码表现:

(function() {
    var foo = "bar";
    console.log(foo);
})();

结论

        在webpack、rollup、esm各种打包器中都可以设置对应的产物类型,我们要根据我们的产物的用途来选择对应的类型,我们一般并不会关心最终的代码产物,但是对于各种类型的产物还是要有一定的了解,这篇文章算是个简单的总结。

鹰眼:悲哀的弱者,如果你真是一流的剑士,就算没跟我交手也明白你我实力的差距吧文章来源地址https://www.toymoban.com/news/detail-691051.html

到了这里,关于js模块化CJS、AMD、CMD、UMD、ESM、IIFE理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 23年,我又学习了一次amd模块化,模块化思想

    src/view1/index.html src/view1/main.js plugins/module.js 源码链接: https://gitee.com/littleboyck/front/tree/master/front-module 联系方式:QQ: 1187253007

    2024年02月07日
    浏览(55)
  • 深入理解JavaScript模块化开发

    前言: 随着JavaScript应用程序的复杂性不断增加,模块化开发成为了一种必备的技术。通过将代码划分为模块,我们可以提高代码的可维护性、可重用性和可扩展性。在本文中,我们将深入探讨JavaScript模块化开发的概念、优势和不同的模块化方案。 模块化开发是将一个大型应

    2024年02月08日
    浏览(91)
  • js模块化开发

    ◼ 到底什么是模块化、模块化开发呢?  事实上模块化开发最终的目的是将程序划分成一个个小的结构;  这个结构中编写属于自己的逻辑代码,有自己的作用域,定义变量名词时不会影响到其他的结构;  这个结构可以将自己希望暴露的变量、函数、对象等导出给其结

    2024年02月13日
    浏览(57)
  • JS模块化系统

    随着 JavaScript 开发变得越来越广泛,命名空间和依赖关系变得越来越难以处理。人们已经开发出不同的解决方案以模块系统的形式来解决这个问题。 CommonJS 是一种同步加载模块的规范,主要用于服务器端的 Node.js 环境。 top:CommonJS 加载的是一个对象(即 module.exports 属性),

    2024年02月19日
    浏览(59)
  • js 模块化

    模块化主要是用来抽离公共代码,隔离作用域,避免变量冲突等。 模块化的整个发展历史如下: IIFE :使用自执行函数来编写模块化,特点:在一个单独的函数作用域中执行代码,避免代码冲突。 AMD :使用 require 来编写模块化,特点:依赖必须提前声明好。 CMD :使用 seaJS

    2024年02月14日
    浏览(50)
  • 【前端模块化】JS模块化思想以及相关规范(CommonJS、ES module)

    1.模块化概念 随着前端应用日趋复杂,项目代码也大量膨胀,模块化就是一种最主流的代码组织方式, 一个模块就是一个实现特定功能的文件 ,它通过把我们的复杂代码按照功能的不同,划分为不同的模块单独维护的这种方式,去提高我们的开发效率,降低维护成本。要用

    2024年02月01日
    浏览(57)
  • Node.js--模块化

    1.1 什么是模块化与模块 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 ,模块的内部数据都是私有的,不过模块可以暴露内部数据以便其他模块使用 1.2 什么是模块化项目 编码时是按照模块一个一个编码

    2024年02月16日
    浏览(58)
  • Node.js模块化

    说明:将复杂的程序文件,拆分多个文件的过程。模块的内部数据是私有的,不过模块可以暴露内部数据供其他模块使用。 说明:编码时是按照模块一个一个编码的,整个项目就是一个模块化的项目。 3.模块化的优势 说明: 提高代码的复用性:模块化可以将代码分解为可重

    2024年02月12日
    浏览(62)
  • 10-Node.js模块化

    目标 了解模块化概念和好处,以及 CommonJS 标准语法导出和导入 讲解 在 Node.js 中每个文件都被当做是一个独立的模块,模块内定义的变量和函数都是独立作用域的,因为 Node.js 在执行模块代码时,将使用如下所示的函数封装器对其进行封装 ​ 而且项目是由多个模块组成的,

    2024年02月07日
    浏览(40)
  • 【node.js】04-模块化

    目录 一、什么是模块化 二、node.js中的模块化 1. node.js中模块的分类 2. 加载模块 3. node.js 中的模块作用域 4. 向外共享模块作用域中的成员 4.1 module对象  4.2 module.exports 对象 4.3 exports对象 5. node.js 中的模块化规范          模块化是指解决一个复杂问题时,自顶向下逐层

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包