自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 前端
一開始,Javascript 沒有辦法導入/導出模塊。這是個問題。想象一下,在一個文件中編寫您的應用程序 - 這將是一場噩夢!

一開始,Javascript 沒有辦法導入/導出模塊。這是個問題。想象一下,在一個文件中編寫您的應用程序 - 這將是一場噩夢!

然后,比我聰明得多的人試圖為 Javascript 添加模塊化。其中一些是CJS、AMD、UMD 和 ESM。您可能聽說過其中一些(還有其他方法,但這些是大玩家)。

我將介紹高級信息:語法、目的和基本行為。我的目標是幫助讀者在看到它們時認出。

CJS

CJS 是 CommonJS 的縮寫。這是它的樣子:

  1. //importing  
  2. const doSomething = require('./doSomething.js');  
  3.  
  4. //exporting 
  5. module.exports = function doSomething(n) { 
  6.   // do something 
  • 你們中的一些人可能會立即從 node.js 中識別出 CJS 語法。那是因為 node使用 CJS 模塊格式。
  • CJS 同步導入模塊。
  • 可以從庫node_modules或本地目錄導入。無論是通過const myLocalModule = require('./some/local/file.js')還是 var React = require('react'); 都可以。
  • 當 CJS 導入時,它會給你一個導入對象的副本。
  • CJS 在瀏覽器中不起作用。它必須被轉(zhuǎn)譯和打包。

AMD

AMD 代表異步模塊定義。這是一個示例代碼:

  1. define(['dep1', 'dep2'], function (dep1, dep2) { 
  2.     //Define the module value by returning a value. 
  3.     return function () {}; 
  4. }); 

要么

  1. // "simplified CommonJS wrapping" https://requirejs.org/docs/whyamd.html 
  2. define(function (require) { 
  3.     var dep1 = require('dep1'), 
  4.         dep2 = require('dep2'); 
  5.     return function () {}; 
  6. }); 
  • AMD 異步導入模塊(因此得名)。
  • AMD 是為前端設(shè)計的(當它被提出時)(而 CJS 后端)。
  • AMD 語法不如 CJS 直觀。我認為 AMD 是 CJS 的完全相反的兄弟。

UMD

UMD 代表通用模塊定義。這是它的樣子(來源):

  1. (function (root, factory) { 
  2.     if (typeof define === "function" && define.amd) { 
  3.         define(["jquery", "underscore"], factory); 
  4.     } else if (typeof exports === "object") { 
  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.  
  12.     var Requester = { // ... }; 
  13.  
  14.     return Requester; 
  15. })); 
  • 適用于前端和后端(因此得名Universal)。
  • 與 CJS 或 AMD 不同,UMD 更像是一種配置多個模塊系統(tǒng)的模式。
  • UMD 通常在使用 Rollup/Webpack 等打包器時用作回退模塊

ESM

ESM 代表 ES 模塊。實現(xiàn)標準模塊系統(tǒng)是 Javascript 的建議。相信很多人都看過這個:

  1. import React from 'react'; 

其他情況

  1. import {foo, bar} from './myLib'; 
  2.  
  3. ... 
  4.  
  5. export default function() { 
  6.   // your Function 
  7. }; 
  8. export const function1() {...}; 
  9. export const function2() {...}; 
  • 適用于許多現(xiàn)代瀏覽器
  • 它兼具兩全其美:類似 CJS 的簡單語法和 AMD 的異步
  • Tree-shakeable,由于 ES6 的靜態(tài)模塊結(jié)構(gòu)
  • ESM 允許像 Rollup 這樣的打包器刪除不必要的代碼,允許站點發(fā)送更少的代碼以獲得更快的加載。

可以在 HTML 中調(diào)用,只需執(zhí)行以下操作:

  1. <script type="module"> 
  2.   import {func1} from 'my-lib'; 
  3.  
  4.   func1(); 
  5. </script> 

這可能無法在所有瀏覽器中 100% 工作。

概括

  • ESM 是最好的模塊格管理式,這要歸功于其簡單的語法、異步性質(zhì)和 tree-shakeability。
  • UMD 隨處可用,通常用作 ESM 不起作用時的后備方案
  • CJS 是同步的,有利于后端。
  • AMD 是異步的,適合前端。

感謝閱讀。

本文由聞數(shù)起舞翻譯自Igor Irianto的文章《What Are CJS, AMD, UMD, and ESM in Javascript?》,轉(zhuǎn)載請注明出處,原文鏈接:

https://irian.to/blogs/what-are-cjs-amd-umd-and-esm-in-javascript/

【責任編輯:趙寧寧 TEL:(010)68476606】

 

責任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2021-07-05 16:10:35

JavaScript代碼前端

2021-04-26 07:51:00

JavaScript方法函數(shù)

2025-02-26 13:07:57

2009-06-09 22:11:44

JavaScriptObject

2024-02-20 08:56:50

JavaScript模塊打包器

2022-11-09 08:05:15

JavaScriptsuper()

2024-08-07 08:48:09

2020-11-10 14:52:47

JavaScript框架開發(fā)

2024-06-17 00:00:00

JavaScripCommonJSNode.js

2025-02-06 08:44:11

MySQLEXISTSIN

2025-02-07 15:58:43

2019-11-27 09:03:49

JavaScriptJavaCSS

2015-01-05 10:31:18

javaScript

2020-08-02 23:20:36

JavaScriptmap()forEach()

2021-10-27 08:54:11

Pythonencodeencoding

2023-10-24 09:07:14

CookieSessionHTTP

2022-09-15 09:54:34

nullPython字符

2023-03-02 08:48:43

Linuxsubshell

2010-06-29 13:58:17

SNMPMIB

2009-07-10 17:15:13

Javascript
點贊
收藏

51CTO技術(shù)棧公眾號