摘要:要想讓模塊再次運(yùn)行,必須清除緩存。模塊加載的順序,按照其在代碼中出現(xiàn)的順序。最近參加了公司開(kāi)展的一次培訓(xùn),結(jié)構(gòu)性思維培養(yǎng)。
序言
模塊化,大家用vue,react等東西,都會(huì)接觸到像exports,module.exports,export,export default,require,define,import等等字段,感覺(jué)很多人對(duì)于這些東西還是分不清,概念非常的模糊,便想著寫(xiě)這么一篇文章,一是幫助自己梳理知識(shí)點(diǎn),二是跟大家一起成長(zhǎng)。其中有寫(xiě)得不對(duì)的,請(qǐng)及時(shí)提出來(lái) ,我及時(shí)更正。
剛開(kāi)始寫(xiě)的時(shí)候有些無(wú)從下手,一是因?yàn)橹R(shí)點(diǎn)太多,二是因?yàn)樽约旱慕?jīng)驗(yàn)還不足以幫助大家從深層次剖析js的模塊化中的區(qū)別,以及其實(shí)現(xiàn)原理、思想。這是一篇自己的學(xué)習(xí)筆記整理,我只能帶大家了解前端模塊化,區(qū)分他們并正確的使用他們。
先給大家扔出幾條知識(shí):
CommonJS:NodeJS模塊系統(tǒng)具體實(shí)現(xiàn)的基石。
AMD:異步模塊規(guī)范,是RequireJS在推廣過(guò)程中對(duì)模塊定義的規(guī)范化產(chǎn)出的,推崇依賴前置;
UMD:兼容AMD和commonJS規(guī)范的同時(shí),還兼容全局引用的方式;
CMD:是SeaJS 在推廣過(guò)程中對(duì)模塊定義的規(guī)范化產(chǎn)出的,推崇依賴就近;
ES6:ES6模塊的設(shè)計(jì)思想是盡量的靜態(tài)化,使得編譯時(shí)就能確定模塊的依賴關(guān)系,以及輸入和輸出的變量;
CommonJS規(guī)范CommonJS官網(wǎng)上寫(xiě)道,它希望js不僅僅可以在瀏覽器上運(yùn)行,而是可以在任何地方運(yùn)行,使其具備開(kāi)發(fā)大型應(yīng)用的能力。
javascript: not just for browsers any more!
CommonJS定義的模塊分為:
模塊引用(require)
模塊定義(exports)
模塊標(biāo)識(shí)(module)
他可以做到:
服務(wù)器端JavaScript應(yīng)用程序
命令行工具
圖形界面應(yīng)用程序
混合應(yīng)用程序(如,Titanium或Adobe AIR)
CommonJS模塊的特點(diǎn)如下
所有代碼都運(yùn)行在模塊作用域,不會(huì)污染全局作用域。
模塊可以多次加載,但是只會(huì)在第一次加載時(shí)運(yùn)行一次,然后運(yùn)行結(jié)果就被緩存了,以后再加載,就直接讀取緩存結(jié)果。要想讓模塊再次運(yùn)行,必須清除緩存。
模塊加載的順序,按照其在代碼中出現(xiàn)的順序。
先談一談包的概念前面給大家說(shuō)過(guò),node.js是基于CommonJS的規(guī)范實(shí)現(xiàn)的,NPM大家一定都很熟悉,它實(shí)踐了CommonJS的包規(guī)范。
包規(guī)范關(guān)于包規(guī)范,類(lèi)比于git倉(cāng)庫(kù),我們可以這么理解:
git init在當(dāng)前文件夾中生成了隱藏文件.git,我們把它叫做git倉(cāng)庫(kù)。
npm init命令在當(dāng)前文件夾中生成了配置文件package.json,它描述了當(dāng)前這個(gè)包,我們管這個(gè)文件叫做包(概念不準(zhǔn)確,可以這么理解)。
包結(jié)構(gòu)嚴(yán)格按照CommonJS規(guī)范來(lái)的話,包的目錄應(yīng)當(dāng)包含以下文件或目錄。
package.json:包描述文件,存在于包頂級(jí)目錄下
bin:存放可執(zhí)行二進(jìn)制文件的目錄
lib:存放js代碼的目錄
doc:存放文檔的目錄
test:存放單元測(cè)試用例代碼的目錄
而package.json則是一個(gè)配置文件,它描述了包的相關(guān)信息。
NodeJS模塊既然node.js是基于CommonJS實(shí)現(xiàn)的,那么我們先來(lái)簡(jiǎn)單看看NodeJS的模塊原理。
最近參加了公司開(kāi)展的一次培訓(xùn),結(jié)構(gòu)性思維培養(yǎng)。任何東西都能夠進(jìn)行分類(lèi),事物一旦進(jìn)行分類(lèi),更利于大家對(duì)此事物的認(rèn)知,也能方便大家記憶。所以我們先來(lái)看看Node的模塊分類(lèi)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/95576.html
摘要:其中命令用于輸入其他模塊提供的功能,命令用于規(guī)定模塊的對(duì)外接口。 簡(jiǎn)單記錄下自己對(duì)前端模塊化的一些淺薄理解,不對(duì)之處歡迎指正 在介紹前端模打包工具之前,我們先簡(jiǎn)單說(shuō)一下瀏覽器、v8和nodejs,因?yàn)槲覀儸F(xiàn)在用到的大部分前端模打包工具,都是需要nodejs環(huán)境運(yùn)行的,同時(shí)他們都能通過(guò)npm進(jìn)行下載 1. 瀏覽器: 瀏覽器組成可分兩部分:Shell+內(nèi)核。瀏覽器內(nèi)核又可以分成兩部分:渲染...
摘要:所有依賴這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。也采用語(yǔ)句加載模塊,但是不同于,它要求兩個(gè)參數(shù)第一個(gè)參數(shù),是一個(gè)數(shù)組,里面的成員就是要加載的模塊第二個(gè)參數(shù),則是加載成功之后的回調(diào)函數(shù)。 本篇文章來(lái)自對(duì)文章《js模塊化編程之徹底弄懂CommonJS和AMD/CMD!》的總結(jié),大部分摘自文章原話,本人只是為了學(xué)習(xí)方便做的筆記,之后有新的體會(huì)會(huì)及時(shí)補(bǔ)充...
摘要:常見(jiàn)前端構(gòu)建工具的分類(lèi)和對(duì)比是附帶的包管理器,是內(nèi)置的一個(gè)功能,允許在文件里面使用字段定義任務(wù)在這里,一個(gè)屬性對(duì)應(yīng)一段腳本,原理是通過(guò)調(diào)用去運(yùn)行腳本命令。 前文 端技術(shù)范圍不斷發(fā)展,前端開(kāi)發(fā)不僅限于直接編寫(xiě)html,css和javascript,Web應(yīng)用日益龐大,代碼也更加龐大,因此許多新的思想(例如模塊化和工程化等)和框架(React和Vue等),以及新的語(yǔ)言(Es6 TypeSc...
摘要:也就是說(shuō),外部模塊輸出值變了,當(dāng)前模塊的導(dǎo)入值不會(huì)發(fā)生變化。三規(guī)范的出現(xiàn),使得模塊化在環(huán)境中得到了施展機(jī)會(huì)。模塊化這種加載稱(chēng)為編譯時(shí)加載或者靜態(tài)加載。總結(jié)的模塊化規(guī)范經(jīng)過(guò)了模塊模式的演進(jìn),利用現(xiàn)在常用的打包工具,非常方便我們編寫(xiě)模塊化代碼。 前言 什么是模塊化? 模塊就是實(shí)現(xiàn)特定功能的一組方法,而模塊化是將模塊的代碼創(chuàng)造自己的作用域,只向外部暴露公開(kāi)的方法和變量,而這些方法之間高度解耦...
摘要:提倡依賴前置,在定義模塊的時(shí)候就要聲明其依賴的模塊。適用場(chǎng)景按需加載條件加載動(dòng)態(tài)的模塊路徑注關(guān)于模塊化,詳細(xì)見(jiàn)阮一峰的入門(mén)模塊與模塊化區(qū)別模塊化的規(guī)范和兩種。 模塊化開(kāi)發(fā)方便代碼的管理,提高代碼復(fù)用性,降低代碼耦合,每個(gè)模塊都會(huì)有自己的作用域。當(dāng)前流行的模塊化規(guī)范有CommonJS,AMD,CMD,ES6的import/export CommonJS的主要實(shí)踐者就是nodejs,一般...
閱讀 1758·2021-10-13 09:39
閱讀 1329·2019-08-30 13:58
閱讀 1419·2019-08-29 16:42
閱讀 3569·2019-08-29 15:41
閱讀 2999·2019-08-29 15:11
閱讀 2493·2019-08-29 14:10
閱讀 3419·2019-08-29 13:29
閱讀 2099·2019-08-26 13:27