亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

來!我們一起來從頭開始構(gòu)建自己的JavaScript模塊化工具

AaronYuan / 3541人閱讀

摘要:能達(dá)到一個(gè)積木塊模塊的要求。接下來我們將改進(jìn)它。結(jié)尾到此,我們自己構(gòu)建了一個(gè)很實(shí)用的模塊化工具,項(xiàng)目的源碼在這里,喜歡的話,給個(gè)。

前言

希望編寫程序能像玩積木一樣,首先規(guī)劃要產(chǎn)出怎樣的作品,然后在積木堆中挑選合適的積木塊,最后一組合就完工了。

于是JavaScript需要類似這樣模塊化,每個(gè)模塊都隱藏內(nèi)部細(xì)節(jié)并且對(duì)外暴露接口,再處理好模塊之間的依賴關(guān)系,就可以達(dá)到玩積木的效果了。

雖然現(xiàn)有很多模塊化框架/工具,但對(duì)于新手來說,為什么不自己擼一個(gè)簡單的模塊化工具呢?

希望通過這個(gè)工具把自己覺得好用的代碼以模塊的方式組織起來,漸漸形成自己的JS庫,之后可以勇敢地和HR說,自己的小項(xiàng)目用的是自己小JS庫,^_^。我覺得,在這個(gè)封裝的過程中,新手能學(xué)習(xí)到很多東西。

新手嘛,多造輪子總是有好處的,=_=。

從閉包到模塊

以下是《你所不知道的JavaScript(上卷)》中對(duì)于閉包的說明。

當(dāng)函數(shù)可以記住并訪問所在的詞法作用域,即使函數(shù)是在當(dāng)前詞法作用域之外執(zhí)行,這時(shí)就產(chǎn)生了閉包。

其實(shí),不管怎樣,閉包正如其字面意思一樣,既能提供一個(gè)相對(duì)封閉的空間,也能向外界暴露必要的接口。這不就正符合我們模塊化的需求嗎?

在此,建議參考這篇文章,以加強(qiáng)您對(duì)閉包的理解:《假如技術(shù)HR問您JavaScript的“閉包”,嘿嘿嘿,舉這個(gè)例子就夠了》。

最簡單的模塊
var test = (function test(){
    function run(){
        console.log("run test");
    }
    return {
        run: run
    };
})();
test.run();

上面的代碼有個(gè)叫test的函數(shù)作為模塊創(chuàng)建器,每次調(diào)用它都可以創(chuàng)建一個(gè)新的模塊。這里使用立即執(zhí)行函數(shù),立即創(chuàng)建了一個(gè)test模塊。參考閉包的概念,外部可以調(diào)用test模塊中的run函數(shù),同時(shí)test模塊又有自己獨(dú)立的作用域。能達(dá)到一個(gè)積木塊(模塊)的要求。

簡單的模塊這樣寫沒有問題,但是模塊間的依賴問題沒有解決。

最簡單的模塊管理工具

模塊之間必然會(huì)存在依賴關(guān)系,而模塊管理工具需要能夠很好地管理模塊間的依賴。下面我們模仿實(shí)現(xiàn)了AMD規(guī)范的工具requirejs,主要是模仿其define,get的API風(fēng)格,自己寫一個(gè)簡單的版本。

//模塊管理工具,MyModules
var MyModules = (function Manager() {
    var modules = {};
    function define(name, deps, impl) {
        for (var i=0; i

可以看出,利用MyModules可以很方便地定義使用模塊,管理模塊依賴。但是還存在一個(gè)問題,MyModules對(duì)于模塊定義的順序有要求。以上面的例子來說,就是app模塊依賴data模塊,那data模塊必須在app模塊之前被定義。這個(gè)限制讓我們實(shí)際使用中不是很方便。接下來我們將改進(jìn)它。

改進(jìn)模塊管理工具

我們需要讓模塊管理工具不需要限制模塊的定義順序,這里我的做法是,使用一個(gè)rebuilds數(shù)組來保存未成功構(gòu)建的模塊。每次有新模塊構(gòu)建成功的時(shí)候就會(huì)重新嘗試去構(gòu)建整個(gè)rebuilds數(shù)組中的模塊。具體看下面的代碼。

window.mm_modules = (function Manager() {
    var debug = false;
    var modules = {};
    var rebuilds = [];
    function copyArray (array){
        var tempArray = [];
        for(var i=0; i

改進(jìn)后的模塊管理工具,能夠自動(dòng)地處理模塊依賴,而不需要限制定義順序了。
那,能不能更進(jìn)一步呢?試著想一下,我們?nèi)粘?huì)怎么使用?單文件單模塊,然后把這些文件放在不同文件夾里組織好。于是,我就想到使用gulp這樣的工具輔助我們。

gulp輔助

請(qǐng)參考下面的目錄結(jié)構(gòu)。

├── dist
│?? ├── index.html
│?? └── js
│??     └── mm-modules-build.js
├── gulpfile.js
├── mm-modules
│?? ├── queryObject.js
│?? ├── request.js
│?? ├── template.js
│?? ├── test.js
│?? └── util.js
├── mm-modules.js

可以在mm-modules下隨意地定義模塊,如util模塊內(nèi)有各種工具函數(shù),template模塊則包含了artTemplate模版引擎。之后利用gulp將mm-modules.js(模塊管理工具)與mm-modules下所有的模塊文件打包成mm-modules-build.js。項(xiàng)目中只要引入mm-modules-build.js即可。

結(jié)尾

到此,我們自己構(gòu)建了一個(gè)很實(shí)用的JavaScript模塊化工具,項(xiàng)目的源碼在這里:https://github.com/MIKUScallion/mm-modules,喜歡的話,給個(gè)?。

再回顧一下前言的話。

希望通過這個(gè)工具把自己覺得好用的代碼以模塊的方式組織起來,漸漸形成自己的JS庫,之后可以勇敢地和HR說,自己的小項(xiàng)目用的是自己小JS庫,^_^。我覺得,在這個(gè)封裝的過程中,新手能學(xué)習(xí)到很多東西。

新手嘛,多造輪子總是有好處的,=_=。

參考

《你所不知道的JavaScript(上卷)》

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79617.html

相關(guān)文章

  • React文檔翻譯系列()安裝

    摘要:文檔翻譯系列一安裝原文地址原文本系列是針對(duì)文檔進(jìn)行的翻譯,因?yàn)樽约涸趯W(xué)習(xí)的時(shí)候,最開始通過看博客或者論壇等中文資料,有些內(nèi)容是零零散散的接收,并沒有給自己帶來很好的效果,所以后來決定把文檔的原文從頭到尾看一遍。 React文檔翻譯系列(一)安裝 原文地址:原文 本系列是針對(duì)React文檔進(jìn)行的翻譯,因?yàn)樽约涸趯W(xué)習(xí)react的時(shí)候,最開始通過看博客或者論壇等中文資料,有些內(nèi)容是零零散散的...

    Fourierr 評(píng)論0 收藏0
  • [譯] 學(xué)習(xí)如何構(gòu)建自動(dòng)化、跨瀏覽器 JavaScript 單元測(cè)試

    摘要:我已經(jīng)把學(xué)習(xí)如何構(gòu)建自動(dòng)化跨瀏覽器的的單元測(cè)試列在我的年度清單中,但我每一次坐下來真正想要做的時(shí)候,我又退卻了。供應(yīng)商支持許多主流的單元測(cè)試框架,包括,,和。 作者:Philip Walton譯者:Yeaseon原文鏈接:Learning How to Set Up Automated, Cross-browser JavaScript Unit Testing 譯文僅供個(gè)人學(xué)習(xí),不用...

    QiuyueZhong 評(píng)論0 收藏0
  • 【譯】WebAssembly 初嘗

    摘要:在當(dāng)前階段,僅僅只是字節(jié)碼規(guī)范。如果都沒有將代碼編譯為字節(jié)碼的工具,要起步就很困難了。接下來要做的是使用將格式的代碼轉(zhuǎn)換為二進(jìn)制碼。運(yùn)行文件,最后就能得到瀏覽器需要的真正的二進(jìn)制碼。 本文轉(zhuǎn)載自:眾成翻譯譯者:文藺鏈接:http://www.zcfy.cc/article/1031原文:http://cultureofdevelopment.com/blog/build-your-fi...

    anonymoussf 評(píng)論0 收藏0
  • 14個(gè)最好 JavaScript 數(shù)據(jù)可視化庫

    摘要:適用于,演示這是開發(fā)的一個(gè)簡單的可視化庫,它允許你創(chuàng)建所有常用的圖表類型條形圖,樹形圖,折線圖,面積圖等。可以輕松地對(duì)折線圖和條形圖進(jìn)行混合和匹配以組合不同的數(shù)據(jù)集,這是非常棒的功能。 翻譯:瘋狂的技術(shù)宅原文:https://www.monterail.com/blo... 本文首發(fā)微信公眾號(hào):jingchengyideng歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 你的程序有多...

    Mertens 評(píng)論0 收藏0
  • [譯]Yarn:個(gè)新JavaScript包管理器

    摘要:第一個(gè)主要的包管理器在被引用后不久就搭建起來了,并且迅速成為世界上最受歡迎的包管理器之一。簡介是一款新的包管理器,在取代客戶端和其他包管理器現(xiàn)有工作流的同時(shí),又保留了對(duì)代理的兼容性。 在JavaScript社區(qū),工程師們分享了成百上千的代碼段,我們不用自己從頭編寫基礎(chǔ)組件、類庫或者框架。反過來,每段代碼又或許依賴于其它的代碼段,而這些依賴就是通過 package managers(包管...

    Steve_Wang_ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<