网站首页
手机版

Javascript 中的 CJS、AMD、UMD 和 ESM 是什么?

更新时间:2024-03-29 12:47作者:小乐

最初,Javascript 无法导入/导出模块。这是个问题。想象一下将您的应用程序编写在单个文件中- 这将是一场噩梦!然后,比我聪明得多的人尝试为Javascript 添加模块化。其中一些是CJS、AMD、UMD 和ESM。您可能听说过其中的一些(还有其他方法,但这些都是大玩家)。我将介绍高级信息:语法、目的和基本行为。我的目标是帮助读者在看到它们时认出它们。

CJSCJS 是CommonJS 的缩写。它看起来是这样的:

//导入const doSomething=require('./doSomething.js'); //exportingmodule.exports=function doSomething(n) { //do Something} 你们中的一些人可能会立即从node.js 语法中认出CJS。这是因为Node 使用CJS 模块格式。 CJS同步导入模块。可以从库node_modules或本地目录导入。通过const myLocalModule=require('./some/local/file.js') 或var React=require('react');当CJS 导入时,它会为您提供导入对象的副本。 CJS 不适用于浏览器。必须对其进行翻译和打包。 AMDAMD 代表异步模块定义。这是示例代码:

Define(['dep1', 'dep2'], function (dep1, dep2) { //通过返回值来定义模块值return function () {};});or

//'简化的CommonJS 包装' https://requirejs.org/docs/whyamd.htmldefine(function (require) { var dep1=require('dep1'), dep2=require('dep2'); return function () {};}) ;AMD 异步导入模块(因此得名)。 AMD 是为前端设计的(当它被提出时)(而CJS 是后端)。 AMD 语法不如CJS 直观。我认为AMD是CJS完全相反的兄弟。 UMDUMD 代表通用模块定义。这就是它的样子(来源):

(function(root,factory) { if(typeofdefine==='function'define.amd){define(['jquery','underscore'],factory); }elseif(typeofexports==='object' ) { module.exports=工厂(require('jquery'), require('下划线')); } else { root.Requester=工厂(root.$, root._); }}(this, function ($, _) { //这是我定义模块实现的地方var Requester={ //. }; return Requester;}));适用于前端和后端(因此称为通用)。与CJS 或AMD 不同,UMD 更多的是一种配置多个模块系统的模式。使用Rollup/Webpack 等捆绑器时,UMD 通常用作后备模块。 ESMESM 代表ES 模块。实现标准模块系统是Javascript 的建议。相信很多人都看过:

import React from 'react';其他情况

import {foo, bar} from './myLib';export default function() { //你的函数};export const function1() {.};export const function2() {.};适用于许多现代浏览器它提供了两全其美的优点:类似CJS 的简单语法和AMD 的异步Tree-shakeable,这要归功于ES6 的静态模块结构ESM 允许像Rollup 这样的打包程序删除不必要的代码,允许网站发送更少的代码以加快加载速度。可以在HTML 中调用,只需执行以下操作: 这可能无法在所有浏览器中100% 工作。

总结ESM 是最好的模块模式管理风格,这要归功于它简单的语法、异步特性和树可抖动性。 UMD 随处可用,并且通常在ESM 不起作用时用作后备方案。 CJS 是同步的,有利于后端。 AMD是异步的,适合前端。谢谢阅读。 (本文由温书其武翻译自Igor Irianto的文章《What Are CJS, AMD, UMD, and ESM in Javascript》,转载请注明出处。原文链接:https://irian.to/blogs/what-are-cjs-amd-umd-and-esm-in-javascript/)

为您推荐

美国最新油电混动军车,和比亚迪唐的模式几乎一致,美国油电混合车型推荐

这款ULV最大亮点就是采用了油电混和驱动系统。(ULV的研发机构,主要承担美军单兵作战系统以及新材料军用化的研发任务。)就在搭载超级电四驱技术的比亚迪混动车唐上市后,美国陆军开始对ULV(Ultra Light Vehicle)油电混动军车

2024-03-29 12:33

拉文大学相当于中国什么等级的大学?(拉文大学mba)

拉文大学 (University of La Verne)简称ULV。创立于1891年,是美国西部最古老的国家级大学之一,建校超过125周年。其前身是教会创立的洛兹伯格学院。1917年洛兹伯格农业社区更名为拉文,学院也随之成为拉文学院。学校

2024-03-29 12:27

印度欲制造超过长征五号的大火箭,还在搞太空军事化(印度重型火箭)

印度一直有个大国梦,在各个领域都希望能出人头地,虽然实际效果不一定像他们想象的那么美好。但是印度的航天水平确实是比较领先的,比很多发达国家的水平还要强。如果说美国、欧空局、中国、俄罗斯、日本是航天综合实力前五名的话,印度是当之无愧的第六名,

2024-03-29 12:12

美国的ULV,俄罗斯的GAZ,这些军用越野车,每辆都让人热血沸腾!,俄罗斯最新军用越野车

今天我们来说点不一样的,越野车大家都司空见惯,但军用越野车相信各位都很陌生吧,它们只为部队服务,很少出现在大众视野,但各个性能不俗随便来一辆都能秒杀牧马人、普拉多、猛禽等热门越野车,今天就让我们看看全球各式各样的军用越野车。美国:ULV这辆

2024-03-29 11:57

美军打造下代军车:混合动力ULV,混合动力军舰

悍马终结者:美军打造下代军车:混合动力ULV美军打造下代军车:混合动力ULV美军打造下代军车:混合动力ULV美军打造下代军车:混合动力ULV美军打造下代军车:混合动力ULV美军打造下代军车:混合动力ULV美军打造下代军车:混合动力ULV美军

2024-03-29 11:45

世界各国军用越野车介绍(16):美国 ULV装甲突击车 美国装甲车越野车有哪些

#世界车中国造# ULV装甲突击车,全称为“轻型通用型装甲车(Ultra Light Vehicle)”,是一款由美国特种装备公司BAE系统公司开发的多功能车辆。该车辆主要被设计用于城市反恐、边境巡逻、特战作战等场景下的装甲作战和行动。重约

2024-03-29 11:32

加载中...

热门文章

SQL Error: select * from ***_ecms_news where titlepic<>'' order by onclick desc limit 1
    SQL Error: select * from ***_ecms_news order by onclick desc limit 1,7

热门推荐

SQL Error: select * from ***_ecms_news where titlepic<>'' and istop=1 order by newstime desc limit 5