真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Cortex依賴(lài)管理-創(chuàng)新互聯(lián)

cortex對(duì)模塊的依賴(lài)基于semantic version進(jìn)行管理,如果熟悉npm的模塊管理方式,大家都了解node的模塊是放在node_modules這個(gè)目錄下,每個(gè)模塊自己的依賴(lài)都放在自己目錄下的node_modules里面,這樣避免了不同模塊之間的共同依賴(lài)版本沖突的問(wèn)題。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),昭化企業(yè)網(wǎng)站建設(shè),昭化品牌網(wǎng)站建設(shè),網(wǎng)站定制,昭化網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,昭化網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M(mǎn)足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

Cortex依賴(lài)管理

而在前端開(kāi)發(fā)中,套嵌的依賴(lài)是不可能的,因?yàn)?

  • 1) web開(kāi)發(fā)的載入是異步的,不能像node那樣去在運(yùn)行時(shí)檢測(cè)文件上依賴(lài)是否存在,遠(yuǎn)程檢測(cè)模塊是否存在再載入非常耗時(shí)。

  • 2) 文件大小限制,相對(duì)于磁盤(pán)的廉價(jià),http請(qǐng)求和頁(yè)面載入重復(fù)的js文件的開(kāi)銷(xiāo)都是非常大的,不可能通過(guò)文件套嵌的方式來(lái)實(shí)現(xiàn)。

所以cortex的模塊管理是基于一個(gè)扁平化的結(jié)構(gòu):

Cortex依賴(lài)管理

那么一個(gè)模塊怎么知道他需要載入的第三方模塊是什么版本呢?比如store.js, 在代碼中使用時(shí)都是

require('store.js')

這個(gè)信息只能告訴我們依賴(lài)什么模塊,而不知道具體版本。通常的loader,比如requirejs,的做法是對(duì)模塊進(jìn)行管理, 模塊的映射是:

“` store.js =./mod/store.js.1.0.0.js ““

這相當(dāng)于一個(gè)全局變量,所有的store.js都會(huì)被固定到某個(gè)版本,即使存在第三方依賴(lài)不兼容1.0.0的版本.

component和bower也是采用扁平化的方式來(lái)儲(chǔ)存模塊,但只有一層目錄。如果在依賴(lài)樹(shù)中存在這兩個(gè)不同版本,不管是否兼容,最終都會(huì)只產(chǎn)生一個(gè)版本,而這個(gè)版本完全取決于依賴(lài)申明的層次,順序和在執(zhí)行install時(shí)異步任務(wù)執(zhí)行的順序,可以說(shuō),是隨機(jī)的。

如果一個(gè)模塊A依賴(lài)于jquery的一個(gè)低版本, 1.8.3, 而另一個(gè)模塊B依賴(lài)于1.9.1,最終結(jié)果在component中是沒(méi)法控制,取決于jquery在依賴(lài)樹(shù)中的位置,導(dǎo)致一個(gè)使用jquery@1.9.1功能的模塊最終安裝的是jquery@1.8.3而出錯(cuò)。

而這樣的錯(cuò)誤是只有在代碼執(zhí)行時(shí)才會(huì)被發(fā)現(xiàn)的,對(duì)于不熟悉的人也很難意識(shí)到是某個(gè)模塊中依賴(lài)問(wèn)題,需要對(duì)component比較熟悉,并且對(duì)自己使用的模塊中依賴(lài)也了解人才能夠很快的發(fā)現(xiàn)問(wèn)題所在。

這樣模塊的開(kāi)發(fā)者和使用者都需要管理代碼的兼容問(wèn)題,使用者需要對(duì)使用的模塊有什么依賴(lài)也有了解,否則他可能會(huì)碰到一個(gè)很難以發(fā)現(xiàn)bug。任何一個(gè)不兼容的模塊都會(huì)破壞這個(gè)生態(tài)環(huán)境,從而使得開(kāi)發(fā)者不敢使用已有的模塊而重復(fù)的造輪子。

而在cortex中, 正確的版本申明能夠使得只有模塊的開(kāi)發(fā)者才需要關(guān)心自己的模塊依賴(lài)。而使用者完全不用擔(dān)心依賴(lài)樹(shù)上的深層次組件會(huì)影響到自己的代碼。 如果在之前的例子中,模塊A的開(kāi)發(fā)者在開(kāi)發(fā)時(shí)是依賴(lài)著jquery@1.8.3, 他可以根據(jù)semantic version申明為:

jquery@^1.8.3

模塊B則申明為:

jquery@^1.9.1

這樣cortex會(huì)發(fā)現(xiàn),存在著jquery@1.9.1在保證兼容的情況下滿(mǎn)足兩個(gè)需求, 最終會(huì)載入正確的jquery@1.9.1。而模塊A和B的使用者不需要關(guān)系A(chǔ)和B到底使用了什么版本的jquery, 他只要管理好A和B就好,cortex會(huì)幫他處理深層次依賴(lài)的問(wèn)題。

由于其他的loader基本上都是基于 “name => js file”的映射來(lái)載入js文件,從而在執(zhí)行環(huán)境中無(wú)法區(qū)分在不同的代碼中name可能代表的含義不同的需求,這也是cortex目前只支持使用neuron作為loader的原因。

有了版本信息, 如果有兩個(gè)模塊依賴(lài)了store.js的相同版本,store.js只會(huì)載入一份,而不會(huì)每個(gè)自帶一份。而cortex支持semantic version的range來(lái)申明依賴(lài),使得只要兩個(gè)版本是兼容的,就不會(huì)出現(xiàn)兩份代碼。

Cortex依賴(lài)管理

而對(duì)于不兼容的代碼,用戶(hù)也不用擔(dān)心功能性失效或者新版本破壞之前的邏輯,即使在一個(gè)頁(yè)面多層次的引用到一個(gè)模塊的不同版本的情況下, 不同的代碼之間也能夠很好的相互兼容。而這樣的穩(wěn)定性,對(duì)于大型項(xiàng)目來(lái)是非常重要的。

在對(duì)性能要求很高的環(huán)境中,可以對(duì)于特定代碼進(jìn)行優(yōu)化, 希望排除多余的文件,可以通過(guò)命令

cortex ls store.js

會(huì)列出在依賴(lài)樹(shù)上的所有的store.js,可以發(fā)現(xiàn)是哪個(gè)模塊依賴(lài)了古老的版本,從而去升級(jí)或者替換依賴(lài)。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


分享標(biāo)題:Cortex依賴(lài)管理-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/dcgpho.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部