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

歡迎訪問 生活随笔!

生活随笔

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

HTML

前端模块规范AMD/UMD/CommonJs

發布時間:2023/12/31 HTML 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端模块规范AMD/UMD/CommonJs 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.babelrc文件中的:module設置為false,為什么會要設置成false?

解釋:使ES6模塊語法轉換到另一個模塊類型(默認啟用“commonjs”)。 設置為假則不變換模塊。或者傳入(“amd”、“umd”,“systemjs”、“commonjs”)。

什么是模塊?

Javascript的組件生態在最近幾年的發展很給力,我們的可選性更加廣泛了。這本是一件好事,但是當多個第三方Javascript在一起混合使用的時候,我們可能會遇到一個很尷尬的問題,那就是不是所有的組件都能在一起很愉快的玩耍的。

為了解決這個問題,兩種競爭關系的前端模塊規范(AMD和CommonJS)問世了。他們規定開發者們采用一種約定好的模式來寫代碼,以避免污染整個生態系統。

AMD規范--通過define(['加載的模塊依賴','',''], 加載完依賴的回調函數)

AMD規范,全稱”Asynchronous Module Definition”,稱為異步模塊加載規范。一般應用在瀏覽器端。流行的瀏覽器端異步加載庫RequireJS(中文網站)實現的就是AMD規范。

下面是使用AMD規范定義一個名為foo模塊的方式,此模塊依賴jquery,

// filename: foo.js define(['jquery'], function ($) {// methodsfunction myFunc(){};// exposed public methodsreturn myFunc; });

AMD講究的是前置執行。稍微復雜的例子如下,foo模塊有多個依賴及方法暴漏,

// filename: foo.js define(['jquery', 'underscore'], function ($, _) {// methodsfunction a(){}; // private because it's not returned (see below)function b(){}; // public because it's returnedfunction c(){}; // public because it's returned// exposed public methodsreturn {b: b,c: c} });

define是AMD規范用來聲明模塊的接口,示例中的第一個參數是一個數組,表示當前模塊的依賴。第二個參數是一個回調函數,表示此模塊的執行體。只有當依賴數組中的所有依賴模塊都是可用的時,AMD模塊加載器(比如RequireJS)才會去執行回調函數并返回此模塊的暴露接口。

注意,回調函數中參數的順序與依賴數組中的依賴順序一致。(即:jquery->$,underscore->_)

當然,在這里我可以將回調函數的參數名稱改成任何我們想用的可用變量名,這并不會對模塊的聲明造成任何影響。

除此之外,你不能在模塊聲明的外部使用$或者_,因為他們只在模塊的回調函數體中才有定義。

關于AMD規定聲明模塊的更多內容,請參考這里。

CMD規范---通過require('加載依賴’)

CMD規范,全稱”Common Module Definition”,稱為通用模塊加載規范。一般也是用在瀏覽器端。瀏覽器端異步加載庫Sea.js實現的就是CMD規范。

下面是使用AMD規范定義一個名為foo模塊的方式,此模塊依賴jquery,

define(function (require, exports, module) {// load dependencevar $ = require('jquery');// methodsfunction myFunc(){};// exposed public methodsreturn myFunc; })

CMD規范傾向依賴就近,稍微復雜一點例子

define(function (requie, exports, module) {// 依賴可以就近書寫var a = require('./a');a.test();// ...// 軟依賴if (status) {var b = requie('./b');b.test();} });

關于AMD和CMD的區別,可參考這篇文章,AMD/CMD與前端規范。

CommonJS規范---require('加載模塊')--module.exports?= 暴露的公共方法名稱

根據CommonJS規范,一個單獨的文件就是一個模塊。每一個模塊都是一個單獨的作用域,也就是說,在一個文件定義的變量(還包括函數和類),都是私有的,對其他文件是不可見的。

如果你在Node.js平臺上寫過東西,你應該會比較熟悉CommonJS規范。與前面的AMD及CMD規范不一樣的是,CommonJS規范一般應用于服務端(Node.js平臺),而且CommonJS加載模塊采用的是同步方式(這跟他適用的場景有關系)。同時,得力于Browserify這樣的第三方工具,我們可以在瀏覽器端使用采用CommonJS規范的js文件。

下面是使用CommonJS規范聲明一個名為foo模塊的方式,同時依賴jquery模塊,

// filename: foo.js // dependencies var $ = require('jquery');// methods function myFunc(){};// exposed public method (single) module.exports = myFunc;

稍微復雜一點的示例如下,擁有多個依賴以及拋出多個接口,

// filename: foo.js var $ = require('jquery'); var _ = require('underscore');// methods function a(){}; // private because it's omitted from module.exports (see below) function b(){}; // public because it's defined in module.exports function c(){}; // public because it's defined in module.exports// exposed public methods module.exports = {b: b,c: c };

UMD規范--支持AMD和CommonJS規范

因為AMD,CommonJS規范是兩種不一致的規范,雖然他們應用的場景也不太一致,但是人們仍然是期望有一種統一的規范來支持這兩種規范。于是,UMD(Universal Module Definition,稱之為通用模塊規范)規范誕生了。

客觀來說,這個UMD規范看起來的確沒有AMD和CommonJS規范簡約。但是它支持AMD和CommonJS規范,同時還支持古老的全局模塊模式。

我們來看個示例,

(function (root, factory) {if (typeof define === 'function' && define.amd) {// AMDdefine(['jquery'], factory);} else if (typeof exports === 'object') {// Node, CommonJS-likemodule.exports = factory(require('jquery'));} else {// Browser globals (root is window)root.returnExports = factory(root.jQuery);} }(this, function ($) {// methodsfunction myFunc(){};// exposed public methodreturn myFunc; }));

個人覺得UMD規范更像一個語法糖。應用UMD規范的js文件其實就是一個立即執行函數。函數有兩個參數,第一個參數是當前運行時環境,第二個參數是模塊的定義體。在執行UMD規范時,會優先判斷是當前環境是否支持AMD環境,然后再檢驗是否支持CommonJS環境,否則認為當前環境為瀏覽器環境(window)。當然具體的判斷順序其實是可以調換的。

下面是一個更加復雜的示例,

(function (root, factory) {if (typeof define === 'function' && define.amd) {// AMDdefine(['jquery', 'underscore'], factory);} else if (typeof exports === 'object') {// Node, CommonJS-likemodule.exports = factory(require('jquery'), require('underscore'));} else {// Browser globals (root is window)root.returnExports = factory(root.jQuery, root._);} }(this, function ($, _) {// methodsfunction a(){}; // private because it's not returned (see below)function b(){}; // public because it's returnedfunction c(){}; // public because it's returned// exposed public methodsreturn {b: b,c: c} }));

Tips: 如果你寫了一個小工具庫,你想讓它及支持AMD規范,又想讓他支持CommonJS規范,那么采用UMD規范對你的代碼進行包裝吧,就像這樣。

轉載自:?前端模塊規范AMD/UMD/CommonJs - 綠色袋子 - 博客園

?

總結

以上是生活随笔為你收集整理的前端模块规范AMD/UMD/CommonJs的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产女人18水真多毛片18精品 | 伊人网亚洲 | 国产精品系列在线播放 | 国产一区二区三区欧美 | 亚洲精品一区二区潘金莲 | 国产精品久久久免费观看 | 97久久国产 | 白俄罗斯毛片 | 美日韩在线观看 | 熟女俱乐部一区二区 | 人妖粗暴刺激videos呻吟 | 久久天堂av| 国产毛片毛片毛片毛片毛片 | 骚婷婷| 玖玖在线观看 | 天天色一色 | 香蕉久久一区二区三区 | 18深夜在线观看免费视频 | 婷婷综合 | 激情在线视频 | 日韩专区一区 | 蜜桃av成人永久免费 | 在线免费观看网站入口在哪 | 亚洲天堂伊人 | 免费毛片在线播放 | 美女隐私免费 | 桃色视频| 天天综合干 | 亚洲精品va | 中文字幕日韩在线视频 | 一二级毛片 | 清纯唯美第一页 | 中国美女一级片 | 超碰美女在线 | 日韩女优一区二区 | 色狠狠av | 国产做受高潮漫动 | 黄色操人| 中文字幕理论片 | 久久精品无码专区 | www.精品国产 | 欧美日韩久久久久久 | 欧美三区四区 | 男女操操操 | 国产一区二区在线视频 | 欧美亚洲另类在线 | 日日摸日日碰夜夜爽无码 | 天堂国产在线 | 熟妇人妻久久中文字幕 | 极品色综合 | 中文字幕第一页在线 | 狠狠av| 日韩一级片网站 | 天天操天天操天天操 | 欧美一级鲁丝片 | sesese99| 国产v片在线观看 | 丰满少妇乱子伦精品看片 | 神秘马戏团在线观看免费高清中文 | 天天色宗合 | 激情四射综合网 | 国产午夜大片 | 亚洲国产理论 | 在线色资源 | 欧美精品免费在线观看 | 亚洲av永久无码国产精品久久 | 99热这里只| 婷婷丁香激情五月 | 男人的天堂2018 | 国产69精品一区二区 | 最色网站| 精品久久久久久久久久久久久久久久久 | 日韩欧美大片 | 天天操天天透 | 精品无码久久久久久久久果冻 | 免费a级网站 | 黄色片免费的 | 亚洲成人福利 | av小次郎收藏 | 少妇裸体视频 | 少妇人妻丰满做爰xxx | 国产又粗又猛又爽又黄 | 台湾150部性三级 | 亚洲成人91 | 又黄又爽又刺激的视频 | 真实乱视频国产免费观看 | 一区二区三区在线免费观看视频 | 国产白丝av | 性高潮网站 | 午夜av毛片 | 亚洲高清在线免费观看 | 黄色免费在线视频 | 亚洲视频一区在线播放 | 成年人的视频网站 | 亚洲乱乱 | 亚洲熟妇av一区二区三区漫画 | 无码专区久久综合久中文字幕 | 欧美在线亚洲 | 国产午夜精品久久久久久久 |