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

歡迎訪問 生活随笔!

生活随笔

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

javascript

让你的插件兼容AMD, CMD ,CommonJS和 原生 JS

發布時間:2025/4/16 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让你的插件兼容AMD, CMD ,CommonJS和 原生 JS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模塊標準

// 支持AMD,CMD以及原生js的引用if (typeof module !== 'undefined' && typeof exports === 'object' && define.cmd) {module.exports = SB;} else if (typeof define === 'function' && define.amd) {define(function() {return SB;});} else {this.SB= SB;} }).call(function() {return this || (typeof window !== 'undefined' ? window : global); } 復制代碼 //做的工作其實就是這么粗暴,判斷當前用的什么就以當前規范來定義(function (root, factory) {if (typeof define === 'function' && define.amd) {// AMDdefine(['jquery'], factory);} else if (typeof exports === 'object') {// CommonJSmodule.exports = factory(require('jquery'));} else {// 全局變量root.returnExports = factory(root.jQuery);}}(this, function ($) {// methodsfunction myFunc(){};// exposed public methodreturn myFunc;})); 復制代碼

UMD:
Universal Module Definition 通用模塊規范。
基于統一規范的目的出現,看起來沒那么簡約,但是支持amd和commonjs以及全局模塊模式。

//做的工作其實就是這么粗暴,判斷當前用的什么就以當前規范來定義 (function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery'], factory); } else if (typeof exports === 'object') { // CommonJS module.exports = factory(require('jquery')); } else { // 全局變量 root.returnExports = factory(root.jQuery); } }(this, function ($) { // methods function myFunc(){}; // exposed public method return myFunc; }));復制代碼


現在的前端模塊化標準主要有兩種, CMD , AMD 。

CMD

CMD 在模塊定義當中有三個變量,分別是 require , exports , module 。除了這三個變量可以辨識 CMD 外, define 函數還有一個公有屬性 define.cmd 。我們也可以檢測這個值來判斷是否是 CMD 。

如果想要對外提供接口的話,可以將接口綁定到 exports (即 module.exports ) 上。

function MyModule() {// ... }if(typeof module !== `undefined` && typeof exports === `object` && define.cmd) {module.exports = MyModule; } 復制代碼

如果需要支持除了 CMD 之外的其他符合 CommonJS 的標準,請去掉 define.cmd

AMD

AMD 規范中, define 函數同樣有一個公有屬性 define.amd 。

AMD 中的參數便是這個模塊的依賴。那么如何在 AMD 中提供接口呢?它是返回一個對象,這個對象就作為這個模塊的接口,故我們可以這樣寫:

function MyModule() {// ... }if(typeof define === `function` && define.amd) {define(function() { return MyModule; }); } 復制代碼

總結

我們除了提供 AMD 模塊接口, CMD 模塊接口,還得提供原生的 JS 接口,一個直接可以用的代碼如下:

;(function(){function MyModule() {// ...}var moduleName = MyModule;if (typeof module !== 'undefined' && typeof exports === 'object' && define.cmd) {module.exports = moduleName;} else if (typeof define === 'function' && define.amd) {define(function() { return moduleName; });} else {this.moduleName = moduleName;} }).call(function() {return this || (typeof window !== 'undefined' ? window : global); }); 復制代碼

一般插件的做法:

if (typeof module != 'undefined' && module.exports) { //CMDmodule.exports = SB;} else if (typeof define == 'function' && define.amd) { //AMDdefine(function() {return SB;});} else { //no AMD or CMDwindow.SB= SB;}復制代碼


總結

以上是生活随笔為你收集整理的让你的插件兼容AMD, CMD ,CommonJS和 原生 JS的全部內容,希望文章能夠幫你解決所遇到的問題。

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