日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

什么是 JavaScript 世界的 UMD

發布時間:2023/12/19 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是 JavaScript 世界的 UMD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

UMD 是 JavaScript 模塊的通用模塊定義模式。這些模塊能夠在任何地方工作,無論是在客戶端、服務器還是其他地方。

UMD 模式通常試圖提供與當今最流行的腳本加載器(例如 RequireJS 等)的兼容性。 在許多情況下,它使用 AMD 作為基礎,并添加了特殊的外殼來處理 CommonJS 兼容性。

所以首先要了解 AMD.

AMD

AMD 代表異步模塊定義(Asynchronous Module Definition). 它是 CommonJS (CJS) 規范的替代品。

API 指定了一種定義模塊的機制,以便可以異步加載模塊及其依賴項。 這特別適用于模塊的同步加載會導致性能、可用性、調試和跨域訪問問題的瀏覽器環境。

AMD 庫公開了一個全局定義函數,其 footprint 為:

define(modulename?,[dependencyA?, dependencyB?,], function (objectA, objectB,) { ...var myExportedObj = function() {}return myExportedObj;});

CommonJS

CommonJS 是一個項目,其目標是為瀏覽器之外的 JavaScript 指定一個生態系統(例如,在服務器上或本地桌面應用程序)。

服務器端 JavaScript 已經存在很長時間了,并且可能提供一些與其他語言相比獨特而有趣的優勢,因為客戶端和服務器都使用相同的語言。

不幸的是,服務器端 JavaScript 非常分散。訪問文件的腳本在 rhino 和 V8 上未經修改就無法使用。 Spidermonkey 和 JavaScriptCore 不能以相同的方式加載附加模塊。 JavaScript Web 框架與其解釋器密切相關,并且經常被迫創建一堆 Python、Ruby 和 Java 程序員認為理所當然的 API。

該項目的目標是創建一個標準庫,最終允許 Web 開發人員在任意數量的 Web 框架和工具中進行選擇,并在最適合其應用程序的平臺上運行該代碼。

例如, foo.js 在同一目錄中加載模塊 circle.js。

const circle = require('./circle.js'); console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);

circle.js:

const PI = Math.PI;exports.area = function (r) {return PI * r * r; };exports.circumference = function (r) {return 2 * PI * r; };

模塊 circle.js 已經導出了函數 area(…) 和 circle(…)。 要將函數和對象添加到模塊的根目錄,您可以將它們添加到特殊的導出對象。

模塊本地的變量將是私有的,就像模塊被包裝在一個函數中一樣。 在這個例子中,變量 PI 是 circle.js 私有的。

如果您希望模塊導出的根是一個函數(例如構造函數),或者如果您想在一次分配中導出一個完整的對象而不是一次構建一個屬性,請將其分配給 module.exports 而不是 exports.

例子:

const square = require('./square.js'); var mySquare = square(2); console.log(`The area of my square is ${mySquare.area()}`);

square.js 的實現:

// Assigning to exports will not modify module, must use module.exports module.exports = function (width) {return {area: function () {return (width * width);}}; }

我們來單步調試一個實際例子來加深理解:

上圖是一個自執行函數,兩個輸入參數 global 和 factory 分別傳入了 this 和 function(exports)…

要導出的函數 log 的實現體,只是一個簡單的 console.log.

上圖這個 require 其實是 Node.js 內部實現:

當前 module 是 local.js 即 node 命令啟動的 module,期望加載的 是 log.js:

從 module 的 paths 數組里就能看出 Node.js 解析 module 的路徑:從當前 module 所在的文件夾出發,一直回溯到 c 盤根目錄下的 node_modules

log.js 的 paths:

load 之前先 compile:

第 1157 行的代碼位置,變量 content 的內容就是 log.js 文件的內容:

compile 的邏輯就是執行 log.js 里的代碼:

在這個上下文里,factory 指向的就是下圖綠色高亮的函數:

define 為 undefined,所以進入 else 分支:

此處把 log 函數寫入到 exports 對象的 log 屬性里:

然后在我們的應用代碼里,就可以使用導出的 log 函數了:

更多Jerry的原創文章,盡在:“汪子熙”:

總結

以上是生活随笔為你收集整理的什么是 JavaScript 世界的 UMD的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 椎名空在线播放 | www.狠狠干 | 欧美绿帽合集videosex | 亚洲喷潮 | 午夜精品剧场 | 青青青青青草 | 国产一区二区四区 | 欧美高清v | 久久精品国产精品亚洲 | 蜜桃av噜噜一区二区三区麻豆 | 女人下面流白浆的视频 | www.国产欧美 | 97人妻精品一区二区三区软件 | 日本不卡一区二区 | 精品一二三四区 | 奴色虐av一区二区三区 | 热热热av | 国产精品电影院 | 97精品在线视频 | 毛片一二三区 | 日本在线一区 | 黄色av网站免费 | 中文字幕第6页 | 色涩色 | 欧美日韩色图 | 在线观看亚洲色图 | jiizzyou欧美2 | 男人看片网站 | 在线播放a | 欧美videos另类极品 | 久久免费精品 | 超碰98在线观看 | 丰满少妇一级片 | 一道本在线视频 | 四虎看黄 | 日日夜夜狠 | 自拍21区| 99精品欧美一区二区 | 精品一区免费观看 | 欧美最猛黑人xxxx黑人猛交 | 久久久久99精品成人片直播 | 欧美日韩生活片 | 亚洲一区二区三区观看 | 亚洲第一二区 | 日韩激情一区二区三区 | 五月天丁香婷 | 日日夜夜操操操 | 91精品国自产在线 | 中文高清av| 色先锋影院 | 五月婷婷六月香 | 天天综合精品 | 福利av在线 | 男女视频在线观看免费 | 一区二区一级片 | 欧美福利视频在线观看 | 91porny丨首页入口在线 | 无码av天堂一区二区三区 | 成人国产欧美 | 国产精品呻吟久久 | 体内精视频xxxxx | 日本天堂一区 | 狠狠操狠狠 | 新天堂在线| 久久一区二区三区四区 | 福利在线一区二区三区 | 国产精品永久 | 91免费看视频 | 女人夜夜春 | 偷拍老头老太高潮抽搐 | 欧美一区三区 | 天天天天天操 | 亚洲淫| 久草中文在线观看 | 欧亚一区二区 | 欧美一区二区三区四区五区六区 | 华人色| 国产精品一区二区三区四区五区 | 国久久久| 精品无码久久久久久久久久 | 日本在线www | 精品无码久久久久久久久 | 瑟瑟视频在线免费观看 | 亚洲18在线看污www麻豆 | 欧美一级不卡 | 日本公与丰满熄 | 亚洲天堂导航 | 免费观看a毛片 | 欧美日韩3p| 久草视频2 | 91精品国产一区二区三竹菊影视 | 亚洲熟妇丰满大屁股熟妇 | 日日摸日日 | 国产 欧美 日本 | 亚洲一二三av | 伊人88| av午夜天堂 | 自拍一区在线 | 亚洲精品二区三区 |