01 - 動機 - Webpack 官方文檔翻譯 Get Started

如果您覺得該文檔對您有幫助莽红,請打賞妥畏,五毛十毛均可。另外安吁,轉(zhuǎn)載請注明作者及出處醉蚁。

Web 應用程序已經(jīng)變得非常復雜,我們需要用項目構(gòu)建工具來應對這種復雜性柳畔,處理各種可能遇到的問題

模塊系統(tǒng)的標準問題

目前模塊系統(tǒng)有幾種不同的標準:

  • <script> 標簽 (沒有模塊系統(tǒng))
  • CommonJS
  • AMD
  • ES6 模塊
  • 其他

<script> 標簽

使用 <script> 標簽馍管,可以在沒有模塊系的情況下,對代碼進行簡單的管理薪韩,之前我們都是這樣做的:

<script src="module1.js"></script>
<script src="module2.js"></script>
<script src="libraryA.js"></script>
<script src="module3.js"></script>

各個模塊中的接口都會被導入到全局對象中确沸,比如 window 對象;這樣就可以在任何地方通過全局對象訪問這些接口

問題:
  • 可會能引發(fā)沖突
  • 加載順序難以管理
  • 依賴問題難以管理
  • 引入的腳本會非常多俘陷,難以閱讀和理解

CommonJs 標準:同步 require

創(chuàng)建模塊的時候罗捎,通過給 exports 對象添加屬性和方法,或者通過給 module.exports 設置值來定義模塊的接口拉盾。

引用的時候桨菜,使用同步 require 方法導入模塊的接口。

//導入模塊
require("module");
require("../file.js");

//創(chuàng)建模塊接口
exports.doStuff = function() {};
module.exports = someValue;

這種方法常常被用在服務端的 node.js 程序中捉偏。

優(yōu)點
  • 在服務端倒得,模塊可以被重用
  • 已經(jīng)有大量這樣的模塊,通過 npm 管理
  • 簡單
缺點
  • 因為是同步導入模塊夭禽,會導致程序掛起霞掺,不適用于網(wǎng)絡應用
  • 不能并行導入多個模塊
實現(xiàn)
  • node.js 用在服務端
  • browserify
  • modules-webmake 編譯成一個包
  • wreq 用在客戶端

AMD 標準:異步 require

AMD 標準中,定義模塊和導入模塊的方式與 CommonJs 是不一樣的

//導入模塊
require(["module", "../file"], function(module, file) { /* ... */ });

//定義模塊
define("mymodule", ["dep1", "dep2"], function(d1, d2) {
  return someExportedValue;
});

優(yōu)點:
  • 適用于網(wǎng)絡應用
  • 可以并行導入多個模塊
缺點:
  • 編碼復雜讹躯,閱讀和書寫都很困難
  • 有很多替代方法
實現(xiàn):
  • require.js 客戶端
  • curl 客戶端

ES6 模塊

EcmaScript6 從語言層面內(nèi)建了模塊系統(tǒng)

import "jquery";
export function doStuff() {}
module "localModule" {}
優(yōu)點:
  • 行業(yè)標準
確定:
  • 目前很多瀏覽器還不支持 ES6
  • 目前很少有模塊使用這種方式

最佳方式

能夠讓開發(fā)者自己選擇模塊標準菩彬,即時可以使用已經(jīng)存在的代碼庫潮梯,也能容易的添加自己定義的模塊骗灶。

傳輸問題

如果想讓模塊在客戶端執(zhí)行,必須通過網(wǎng)絡從服務端將他們傳輸過來秉馏。極端情況下耙旦,會出現(xiàn)下面這兩種情況:

  • 為每個模塊發(fā)送一個請求
  • 所有模塊只用一個請求

通常,我們兩種情況都會遇到萝究,兩種情況都存在一些問題:

  • 每個模塊一個請求

    • 優(yōu)點:只請求需要的模塊
    • 缺點:會有很多請求母廷,造成性能問題
  • 所有模塊一個請求

    • 優(yōu)點:請求少,不會造成性能問題
    • 確定:會引入很多無用的模塊

折中方式

折中的方式是:將所有模塊編譯成幾個小的分塊糊肤,減少了請求數(shù)量琴昆,也減少了無效的引用

資源管理問題

當前的 Web 引用已經(jīng)很復雜,除了 Javascript 馆揉,還有其他各種資源需要引入:

  • stylesheets 樣式表
  • images 圖片
  • webfonts 字體
  • html 模板
  • 其他

除此以外业舍,還有一些翻譯轉(zhuǎn)換工作

  • coffeescriptjavascript
  • elmjavascript
  • less stylesheetscss stylesheets
  • jade templatesjavascript which - generates html
  • i18n filessomething
  • 其他

我們希望能像下面這樣引入資源

require("./style.css");
require("./style.less");
require("./template.jade");
require("./image.png");

依賴管理問題

現(xiàn)代 Web 應用會導入很多外部依賴,管理起來非常困難升酣,特別是某些依賴還是以表達式的形式出現(xiàn)舷暮,比如

require("./template/" + templateName + ".jade")

除此以外,還有很多其他稀奇古怪的形式噩茄。

策略

一個優(yōu)秀的解析器可以讓使用各種古怪依賴管理的代碼正常運行下面。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绩聘,隨后出現(xiàn)的幾起案子沥割,更是在濱河造成了極大的恐慌耗啦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件机杜,死亡現(xiàn)場離奇詭異帜讲,居然都是意外死亡,警方通過查閱死者的電腦和手機椒拗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門似将,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚀苛,你說我怎么就攤上這事在验。” “怎么了堵未?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵腋舌,是天一觀的道長。 經(jīng)常有香客問我兴溜,道長侦厚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任拙徽,我火速辦了婚禮刨沦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膘怕。我一直安慰自己想诅,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布岛心。 她就那樣靜靜地躺著来破,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忘古。 梳的紋絲不亂的頭發(fā)上徘禁,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音髓堪,去河邊找鬼送朱。 笑死,一個胖子當著我的面吹牛干旁,可吹牛的內(nèi)容都是我干的驶沼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼争群,長吁一口氣:“原來是場噩夢啊……” “哼回怜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起换薄,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤玉雾,失蹤者是張志新(化名)和其女友劉穎翔试,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抹凳,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡遏餐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年伦腐,在試婚紗的時候發(fā)現(xiàn)自己被綠了赢底。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柏蘑,死狀恐怖幸冻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咳焚,我是刑警寧澤洽损,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站革半,受9級特大地震影響碑定,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜又官,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一延刘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧六敬,春花似錦碘赖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至审编,卻和暖如春撼班,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垒酬。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工砰嘁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伤溉。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓般码,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乱顾。 傳聞我的和親對象是個殘疾皇子板祝,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容