Webpack ?整理

現(xiàn)狀:前端開發(fā)是基于多語言、多層次的編碼和組織工作罕模,前端產(chǎn)品的交付是基于瀏覽器,這些資源是通過增量加載的方式運(yùn)行到瀏覽器端。

webpack 的特點(diǎn)

代碼拆分

Webpack 有兩種組織模塊依賴的方式墓懂,同步和異步。異步依賴作為分割點(diǎn)霉囚,形成一個(gè)新的塊捕仔。在優(yōu)化了依賴樹后,每一個(gè)異步區(qū)塊都作為一個(gè)文件被打包盈罐。

Loader

Webpack 本身只能處理原生的 JavaScript 模塊榜跌,但是 loader 轉(zhuǎn)換器可以將各種類型的資源轉(zhuǎn)換成 JavaScript 模塊。這樣盅粪,任何資源都可以成為 Webpack 可以處理的模塊钓葫。

智能解析

Webpack 有一個(gè)智能解析器,幾乎可以處理任何第三方庫票顾,無論它們的模塊形式是 CommonJS础浮、 AMD 還是普通的 JS 文件。甚至在加載依賴的時(shí)候奠骄,允許使用動(dòng)態(tài)表達(dá)式 require("./templates/" + name + ".jade")豆同。

插件系統(tǒng)

Webpack 還有一個(gè)功能豐富的插件系統(tǒng)。大多數(shù)內(nèi)容功能都是基于這個(gè)插件系統(tǒng)運(yùn)行的含鳞,還可以開發(fā)和使用開源的 Webpack 插件影锈,來滿足各式各樣的需求。

快速運(yùn)行

Webpack 使用異步 I/O 和多級(jí)緩存提高運(yùn)行效率,這使得 Webpack 能夠以令人難以置信的速度快速增量編譯鸭廷。

Webpack 會(huì)分析入口文件枣抱,解析包含依賴關(guān)系的各個(gè)文件。這些文件(模塊)都打包到 bundle.js 辆床。Webpack 會(huì)給每個(gè)模塊分配一個(gè)唯一的 id 并通過這個(gè) id 索引和訪問模塊沃但。模塊會(huì)在運(yùn)行 require 的時(shí)候再執(zhí)行。

Loader

Webpack 本身只能處理 JavaScript 模塊佛吓,如果要處理其他類型的文件宵晚,就需要使用 loader 進(jìn)行轉(zhuǎn)換。loader 本身是一個(gè)函數(shù)维雇,接受源文件作為參數(shù)淤刃,返回轉(zhuǎn)換的結(jié)果。

Loader 可以在 require() 引用模塊的時(shí)候添加吱型,也可以在 webpack 全局配置中進(jìn)行綁定逸贾,還可以通過命令行的方式使用。

引入一個(gè) CSS 文件 style.css津滞,首頁將 style.css 也看成是一個(gè)模塊铝侵,然后用 css-loader 來讀取它,再用 style-loader 把它插入到頁面中触徐。

在entry.js文件中引入:

require("!style-loader!css-loader!./style.css") // 載入 style.css
// 感嘆號(hào)用來連接不同的loader咪鲜, 而且執(zhí)行順序是從右到左

安裝 loader:

npm install css-loader style-loader

刷新頁面,就ok了撞鹉。

我們也可以將 entry.js 文件中的 require("!style!css!./style.css") 修改為 require("./style.css") 疟丙,然后執(zhí)行:

$ webpack entry.js bundle.js --module-bind 'css=style-loader!css-loader'

配置文件

我們可以通過配置文件的方式代替命令行的執(zhí)行。
創(chuàng)建 package.json 來添加 webpack 需要的依賴:

{
  "name": "webpack-example",
  "version": "1.0.0",
  "description": "A simple webpack example.",
  "main": "bundle.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "webpack"
  ],
  "author": "zhaoda",
  "license": "MIT",
  "devDependencies": {
    "css-loader": "^0.21.0",
    "style-loader": "^0.13.0",
    "webpack": "^1.12.2"
  }
}

運(yùn)行npm install
創(chuàng)建一個(gè)配置文件 webpack.config.js:

var webpack = require('webpack')
module.exports = {
  entry: './entry.js',
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      {test: /\.css$/, loader: 'style-loader!css-loader'}
    ]
  }
}

最后運(yùn)行 webpack 就ok了鸟雏。

添加插件

插件可以完成更多 loader 不能完成的功能享郊,一般是在 webpack 的配置信息 plugins 選項(xiàng)中指定。

var webpack = require('webpack')
module.exports = {
  entry: './entry.js',
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      {test: /\.css$/, loader: 'style-loader!css-loader'}
    ]
  },
  plugins: [
    new webpack.BannerPlugin('This file is created by zhaoda')
  ]
}

開發(fā)環(huán)境

webpack 編譯時(shí)孝鹊,通過參數(shù)讓編譯的輸出內(nèi)容帶有進(jìn)度和顏色炊琉。

$ webpack --progress --colors

啟動(dòng)監(jiān)聽模式,沒有變化的模塊會(huì)在編譯后緩存到內(nèi)存中又活,而不會(huì)每次都被重新編譯苔咪,整體速度是很快。

$ webpack --progress --colors --watch

使用
webpack-dev-server 開發(fā)服務(wù)是一個(gè)更好的選擇皇钞。它將在 localhost:8080 啟動(dòng)一個(gè) express 靜態(tài)資源 web 服務(wù)器悼泌,并且會(huì)以監(jiān)聽模式自動(dòng)運(yùn)行 webpack松捉,在瀏覽器打開 http://localhost:8080/http://localhost:8080/webpack-dev-server/可以瀏覽項(xiàng)目中的頁面和編譯后的資源輸出夹界,并且通過一個(gè) socket.io 服務(wù)實(shí)時(shí)監(jiān)聽它們的變化并自動(dòng)刷新頁面。

// 安裝
$ npm install webpack-dev-server -g
// 運(yùn)行
$ webpack-dev-server --progress --colors
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市可柿,隨后出現(xiàn)的幾起案子鸠踪,更是在濱河造成了極大的恐慌,老刑警劉巖复斥,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件营密,死亡現(xiàn)場離奇詭異,居然都是意外死亡目锭,警方通過查閱死者的電腦和手機(jī)评汰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痢虹,“玉大人被去,你說我怎么就攤上這事〗蔽ǎ” “怎么了惨缆?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丰捷。 經(jīng)常有香客問我坯墨,道長,這世上最難降的妖魔是什么病往? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任捣染,我火速辦了婚禮,結(jié)果婚禮上停巷,老公的妹妹穿的比我還像新娘液斜。我一直安慰自己,他們只是感情好叠穆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布少漆。 她就那樣靜靜地躺著,像睡著了一般硼被。 火紅的嫁衣襯著肌膚如雪示损。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天嚷硫,我揣著相機(jī)與錄音检访,去河邊找鬼。 笑死仔掸,一個(gè)胖子當(dāng)著我的面吹牛脆贵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播起暮,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卖氨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起筒捺,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤柏腻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后系吭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體五嫂,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年肯尺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沃缘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡则吟,死狀恐怖孩灯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逾滥,我是刑警寧澤峰档,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站寨昙,受9級(jí)特大地震影響讥巡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舔哪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一欢顷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捉蚤,春花似錦抬驴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陕悬,卻和暖如春题暖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捉超。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工胧卤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拼岳。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓枝誊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惜纸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叶撒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺绝骚,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,164評(píng)論 7 35
  • GitChat技術(shù)雜談 前言 本文較長痊乾,為了節(jié)省你的閱讀時(shí)間,在文前列寫作思路如下: 什么是 webpack椭更,它要...
    蕭玄辭閱讀 12,693評(píng)論 7 110
  • 在現(xiàn)在的前端開發(fā)中哪审,前后端分離、模塊化開發(fā)虑瀑、版本控制湿滓、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,440評(píng)論 1 32
  • 雙眼不見繁華 雙耳不聞落花 我身披袈裟舌狗,把破廟敲成了古剎 卻因池塘里跳出的那只青蛙 淚如雨下
    沐風(fēng)而歌閱讀 191評(píng)論 0 3
  • 旅行是一個(gè)人一張車票一個(gè)目的地叽奥,旅途中所有事都是未知,有趣驚奇驚險(xiǎn)痛侍,這或許就是旅行的意義朝氓。但旅游卻是三兩親朋好友,...
    筱曉笑閱讀 680評(píng)論 1 9