首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【模块化】:JS 模块化极简史

    “全局变量输入”型模块 4. 百家争鸣:CommonJS、AMD、CMD 4.1. CommonJS 4.2. AMD 4.3. CMD 5. 一统天下:ES6 Module 1....——《软件工程》 在模块化编程中,开发者将程序分解成离散功能块(discrete chunks of functionality),并称之为模块。...百家争鸣:CommonJS、AMD、CMD JavaScript 在语言层面迟迟不推出模块化功能,这个背景下,各“民间组织”提出了CommonJS、AMD、CMD 模块化规范......import): 总结一下 传统模块化手段:通过JS的闭包、对象、自执行函数等语言特性,避免模块间的命名冲突,提高模块的内聚性,但无统一编程标准,也无法把模块间的依赖关系描述清晰; CommonJS...Module:官方模块化标准,是语言的一部分,无需额外引入第三方库;ES6 Module同CommonJS一样,也是静态模块化规范,无法实现“按需加载”;但目前有一份处于stage3阶段的 dynamic

    2.4K10

    30分钟学会前端模块化开发

    同时,为了避免凌乱的配置,最好不要使用多级嵌套的目录层次来组织代码,而是要么将所有的脚本都放置到baseUrl中,要么分置为项目库/第三方库的一个扁平结构,如下: www/ index.html js/...3.5.2、依赖第三方的库(AMD依赖jQuery) jQuery 1.7 开始支持将 jQuery 注册为一个AMD异步模块。...考虑在这些设备上使用优化器将依赖导出为数组形式。 更多的信息可参看CommonJS Notes页面,以及"Why AMD"页面的"Sugar"段落。...优化工具需要生成模块名以将多个模块打成一个包,加快到浏览器的载人速度。...npm的使用场景: 允许用户获取第三方包并使用。 允许用户将自己编写的包或命令行程序进行发布分享。

    4.5K50

    《深入浅出Node.js》:node的模块规范与模块实现

    Node使用模块化来组织JS代码,模块规范采用CommonJS规范。 对于JavaScript语言本身来说,有几个方面的天然缺陷: 没有模块系统。 标准库较少。...核心模块和第三方JavaScript文件模块调用。...文件模块通常由第三方编写,包括普通的JavaScript模块和C/C++扩展模块,主要调用方向为普通JavaScript模块调用扩展模块。 ?...所以CommonJS规范更适合于后端,而前端的模块引入使用AMD规范更适宜,或者也可以使用CMD规范。我更习惯于用AMD规范。...为了让同一个模块可以运行在前后端,在写模块时就需要考虑兼容前端也实现模块规范的环境。为保持前后端一致性,类库代码可以包装在一个闭包内,这方面比较典型的就是JQuery了。

    1.4K30

    模块机制

    模块机制.png 模块机制 CommonJS 规范 CommonJS 规范 模块引用 模块定义 模块标识 规范涵盖了模块 二进制 Buffer 字符集编码 I/O流 进程环境 文件系统 套接字 单元测试...内部库 其他库 模块编写:C/C++扩展模块与内建模块的套路一样,将方法挂载在target对象上,然后通过NODE_MODULE 声明即可 模块编译,在GYP工具的帮助下,编译过程会根据平台不同,分别通过..., 供文件模块调用 纯粹的功能模块 包与 NPM 在模块之外,包和 NPM则是将模块联系起来的一种机制 包结构 是一个存档文件 包描述文件与NPM 用于表达非代码相关的信息,package.json NPM...常用功能 帮助完成了第三方模块的发布、安装和依赖等 可以帮助用户快速安装和管理依赖包 局域NPM 企业搭建自己的NPM仓库 享受到模块开发带来的低耦合和项目组织上的好处 考虑到模块保密性的问题 NPM潜在问题...包的质量 安全性 前后端共用模块 AMD规范是CommonJS模块规范的一个延伸 CMD规范与AMD规范的主要区别在于定义模块和依赖引入的部分

    62810

    一文快速上手Rollup,JavaScript类库打包好帮手

    所以当开发应用时可以优先选择webpack,但是rollup对于代码的Tree-shaking和ES6模块有着算法优势上的支持,若你项目只需要打包出一个简单的bundle包,并是基于ES6模块开发的,可以考虑使用...-f参数是--format的缩写,它表示生成代码的格式,amd表示采用AMD标准,cjs为CommonJS标准,esm(或 es)为ES模块标准。...为了解决这个问题,将我们编写的源码与依赖的第三方库进行合并,rollup.js为我们提供了resolve插件。...然而大量的npm模块是基于CommonJS模块方式,这就导致了大量 npm模块不能直接编译使用。...因此使得rollup.js编译支持npm模块和CommonJS模块方式的插件就应运而生:@rollup/plugin-commonjs。

    2.6K21

    JavaScript中的三种模块化规范AMD CMD CommonJS

    增加了代码的健壮性和容错性 模块的第三方依赖 模块职责唯一性 把依赖的模块,通过依赖注入的形式,在你的参数上进行体现。...,是一种妥协的实现 实现: require.js CMD CMD规范和AMD相似,尽量保持简单,并且与CommonJS和NodeJS的Modules规范保持了很大的兼容性。.../file.js"); 优点: 服务器端便于重用 NPM中已经将近20w个模块包 简单并容易使用 缺点: 同步的模块方式不适合不适合在浏览器环境中,同步意味着阻塞加载,浏览器资源是异步加载的 不能非阻塞的并行加载多个模块...实现:node.js nodejs中,原生已经实现了模块化,已经不需要导入第三方库了,可以直接require() 服务器端与浏览器端的技术选型?...在CommonJS中,有一个全局性方法require(),用于加载模块 浏览器端 -- AMD(requirejs) CMD(Seajs) 因为服务器与APP都是加载的本地的资源,所以,不用回调这种操作

    65100

    Rollup模块打包踩坑指南

    CommonJS,导致 Rollup 的一些处理失败 } }] ], "plugins": ["external-helpers"] //允许 Rollup 在包的顶部只引用一次...CommonJS模块,在Rollup中,加载CommonJS模块的能力放在可选插件中,我们需要安装rollup-plugin-commonjs。...可选的输出模块类型有下面这些: amd – 异步模块定义,用于像 RequireJS 这样的模块加载器。 cjs – CommonJS,适用于 Node 和 Browserify/Webpack。...es – 将软件包保存为 ES 模块文件。 iife – 一个自动执行的功能,适合作为标签。(如果要为应用程序创建一个捆绑包,您可能想要使用它,因为它会使文件大小变小。)...umd – 通用模块定义,以 amd,cjs 和 iife 为一体。 为了放在中使用,方便测试,我们将打包格式改为umd。

    3.7K30

    手摸手带你撸一个CommonJs规范

    Node系列-上一节事件循环详解 目录 为什么会有模块化 防止代码重名 变量污染全局 太长,使用不爽 怎么实现模块化的思路 闭包 以前的废弃了 AMD、CMD 现代使用Node:CommonJs、es6...直接定义依赖(1999) 直接定义依赖和现在流行的CommonJs相似,不同点在于CommonJs中定义一个文件即一个模块,而它则可以再任何文件中定义模块,模块和文件不关联。Dojo的思想。...CommonJs(2009) 现代流行的模块化解决方案,从Node端再引入到前端。也是本文着重讲解的一个知识点。 AMD(2009) RequireJs的思想,核心是依赖前置。...UMD(2011) 兼容了CommonJs和AMD,核心思想是如果在CommonJs环境下,即存在module.exports,不存在define时将函数执行结果交给module.exports实现CommonJs...实现一个简易的模块化 跟着上面的思路我们大致了解到了模块化的几个核心点 缓存,提高读取性能 处理文件的查找规则(下面将会给出详细查找规则) 内置模块如何处理 第三方模块如何处理 文件模块如何处理 通过fs.readFileSync

    44220

    【前端面试题】10—18道有关模块化开发的面试题(附答案)

    2、说说你对 CommonJS和AMD的理解。 CommonJS是服务器端模抉的规范, Node. js采用了这个规范。CommonJS规范同步加载模块,也就是说,只有加载完成,才能执行后面的操作。...就近依赖,需要时再进行加载,所以执行顺序和书写顺序一致;这一点与AMD不同,AMD是在使用模块之前将依赖模块全部加载完成,但由于网络等其他因素可能导致依赖模块下载的先后顺序不一致,这就造成执行顺序可能与书写顺序不一致...(1)类似于 Commonjs,语法更简洁 (2)类似于AMD,直接支持异步加载和配置模块加载 (3)对于结构可以做静态分析、静态检测。 (4)比 CommonJS更妤地支持循环依赖。...SeaJS更简洁优雅,更贴近 CommonJS Modules/1.1和 Node Modules规范。 (3) require.JS尝试让第三方类库修改自身来支持 require.JS。...18、什么是模块化规范? 服务器端规范主要是 CommonJS, Node.js用的就是 CommonJS规范客户端规范主要有推崇依赖前置的AMD和推崇依赖就近的CMD。

    2.3K20

    浅谈前端模块化

    @有了模块的概念,但为了让大家能方便的加载各种模块,因此需要一套编写模块的规范,而目前通行的Javascript的模板规范共有两种:CommonJS 和 AMD CommonJS CommonJS的历史渊源...: nodejs项目的诞生,将javascript语言用于服务器编程。...,模块执行的函数 AMD的模块加载定义:跟CommonJS 一样,AMD也采用require()语句来加载模块,但是与CommonJS不同的是,它要求有两个参数: require([module],...引用AMD的Javscript库: 目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js RequireJS与SeaJS @根据诞生的时间,先有了Requirejs...RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。SeaJS 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。 代码质量有差异。

    1.1K100

    浅谈前端模块化

    @有了模块的概念,但为了让大家能方便的加载各种模块,因此需要一套编写模块的规范,而目前通行的Javascript的模板规范共有两种:CommonJS 和 AMD CommonJS CommonJS的历史渊源...: nodejs项目的诞生,将javascript语言用于服务器编程。...,模块执行的函数 AMD的模块加载定义:跟CommonJS 一样,AMD也采用require()语句来加载模块,但是与CommonJS不同的是,它要求有两个参数: require([module],...引用AMD的Javscript库: 目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js RequireJS与SeaJS @根据诞生的时间,先有了Requirejs...RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。SeaJS 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。 代码质量有差异。

    70720

    javascript基础修炼(4)——UMD规范的代码推演

    它是为了让模块同时兼容AMD和CommonJs规范而出现的,多被一些需要同时支持浏览器端和服务端引用的第三方库所使用。...: (function (factory){ //假设没有使用任何模块化方案,那么将工厂函数执行后返回的内容直接挂载到全局 window.Some_Attr = factory(); }...有的时候我们也希望可以将模块挂载到非全局的环境,将挂载对象动态传入可以让代码变得更灵活,此处涉及到一个基础知识,就是浏览器环境中的全局对象拥有parent,top,self三个属性来追踪页面中嵌入<iframe...self : this, function(){ })); 2.2 适配AMD 接着我们先来加入AMD的规范的适配,规范地址:AMD规范github地址: /* * AMD规范的模块定义格式是...接着我们先来加入CommonJs的规范的适配: /* * CommonJs规范使用require('moduleName')的格式来引用模块,使用module.exports对象输出模块,所以只要把模块的输出内容挂载到

    98830

    三大主流模块打包工具对比

    从最初简单的文件合并,到AMD 的模块具名化并合并,再到browserify将CommonJS 模块转换成为浏览器端可运行的代码,打包器做的事情越来越复杂,角色也越来越重要。...;}); AMD 通过将模块的实现代码包在匿名函数(即AMD 的工厂方法,factory)中实现作用域的隔离,通过文件路径作为天然的模块ID 实现命名空间的控制,将模块的工厂方法作为参数传入全局的define...browserify 支持的则是符合 CommonJS 规范的 JavaScript 模块。不严格地说,CommonJS 可以看成去掉了define 及工厂方法外壳的AMD。...考虑到AMD 规范与CommonJS 规范各有各的优点,且都有着可观的使用率,webpack 同时支持这两种模块格式,甚至支持二者混用。...在真实使用中,需要被拆分出来的可能是某个体积较大的第三方库(延后加载并使用),也可能是一个点击触发浮层的内部逻辑 (除非触发条件得到满足,否则不需要加载执行),将这些内容按需地异步加载可以让我们以较小的代价

    2.3K80
    领券