很久没有做过传统的Web开发了,但是这次在帮助朋友的同时使用了很多经典的插件。在使用Popper时,发现引用地址分为三个路径:esm、cjs、umd,但是由于像我这样的三心二意的和尚只知道amd的异步模块的定义,所以不知道这三个是什么。直觉上我认为这与模块化有关,因为UMD 与AMD 非常相似。立即搜索以了解更多信息。
在学习过程中,我发现最直观的就是看代码。我实际上使用了一些模式,我不知道它们叫什么,但是只要看代码,你就会很快找到技术路径的相应分支。
ESM(ES 模块:异步导入) import {foo, bar} from './myLib';export default function() {.};export const function1() {.};export const function2( ) {.};
这种格式对我来说非常熟悉,因为vue、混合应用程序和小程序近年来有了显着的发展。个人快速理解: 1、ES模块是Javascript提出的一种实现标准模块系统的方案。 2、具有CJS的简单语法和AMD的异步性。 3. ESM允许打包者删除不必要的代码并减少代码打包以加快加载速度。 4.得益于ES6的静态模块结构,可以进行Tree Shaking(例如根据Rollup阶段创建的标记进行代码收集,最终生成实际代码),非常适合优化)。
CJS (CommonJS: 同步模块导入) const doSomething=require('./doSomething.js'); module.exports=function doSomething(n) {.}
显然,这是我们所知的NodeJS 中使用的CJS 模式。我的简单理解: 1. CJS在浏览器中不起作用。它需要转换和打包。 2. CJS中每个js文件都是一个独立的模块。 3、CJS规范加载模块是同步的,加载完成后才能进行后续操作。 4.所有代码都在模块作用域中运行,不会污染全局作用域。 5. 一个模块可以多次加载,但第一次加载时只执行一次,之后执行结果会被缓存,以后加载时可以直接读取缓存的结果。必须清除缓存才能使模块再次工作。
AMD(异步模块定义)define(['dep1', 'dep2'], function (dep1, dep2) { return function () {};});
新时代的JavaScript 开发者可能对这个模型不是很熟悉,但是作为老用户应该非常熟悉。在ESM仍然空缺的州,AMD只是这个领域的救世主,包括经典的RequireJS。个人简单理解: 1.AMD允许异步加载模块,加载完成后执行模块代码。 2. AMD可以按需加载模块,并在加载模块的同时并行执行其他任务,提高应用程序性能。 3、实现js文件的异步加载,避免失去网页响应能力,管理模块之间的依赖关系,让代码更容易编写和维护。 4. AMD主要用于前端应用程序,目前很少使用。
UMD (通用模块定义) (function (root, Factory) { //AMD if (typeof Define==='function' Define.amd) {define(['jquery', 'underscore'], Factory) ; } //CJS else if (typeof Exports==='object') {module.exports=Factory(require('jquery'), require('underscore')); } //浏览器全局变量(根为window ) else { root. returnExports=Factory(root.jQuery, root._); }}(this, function ($, _) { //方法function a(){}; //私有方法( ) function b(){}; //public 方法,返回function c(){}; //public 方法,返回//公开的public 方法return { b: b, c: c }} ));
当我第一次看到UMD 规格时,我的第一印象是,“这真是一团糟。”然而,当我自己读完之后,我发现我已经很了解了。这是正确的。几个月前,当我修复一款2018年的链游时,我做了类似的事情,以便服务器(NodeJS)和网站(RequireJS)可以共享一些模块。我的简单理解: 1. UMD允许模块在任何JavaScript执行环境中工作。 2、UMD最外层是一个自执行函数,最终允许模块导出。 3. 至少包含AMD 和CJS 兼容的模块输出。 4. UMD主要由一些第三方库使用,随着AMD应用的逐渐衰落,UMD将变得越来越不重要。
前端的方向是在程序引入的时候就决定了,所以我理解不同时代有不同的思维方式和规范,但相比服务器端技术更新换代的速度,前端正在发生变化速度很快而且落后了。我最终接受了它。你必须要小心。我曾经和一位工程师朋友讨论过技术迭代的问题。这是因为不断的学习和淘汰是非常耗费精力和时间的。有时候改变的不仅仅是技术,更重要的是理念。 【最初发表于2022年12月30日作者博客】点击“阅读原文”即可恢复文章中所有链接。
阅读原文:https://www.gsgundam.com/2022/2022-12-30-z00-Understanding-of-cjs-amd-umd-esm/
标题:简单理解抵押和质押区别,简单理解贴现
链接:www.ggaan.com/news/sypc/2736.html
版权:文章转载自网络,如有侵权,请联系删除!