webpack 那些事 (一)使用篇

最近在研究webpack,關(guān)于webpack鄙人計(jì)劃寫三篇文章:

  • wepack的使用
  • wepack的優(yōu)化方案
  • 試讀wepack的源碼分析其原理

其目的就是為了寫下來印象深刻,理解通透旋奢,當(dāng)然方便日出自己的查看徒溪,當(dāng)然鄙人能力有限就珠,也希望各位給出寶貴的意見补履,歡迎拋磚~~

webpack 是什么?

WebPack可以看做是模塊打包機(jī):它做的事情是太伊,分析你的項(xiàng)目結(jié)構(gòu)负蠕,找到JavaScript模塊以及其它的一些瀏覽器不能直接運(yùn)行的拓展語言(Scss,TypeScript等)倦畅,并將其打包為合適的格式以供瀏覽器使用遮糖。

構(gòu)建就是把源代碼轉(zhuǎn)換成發(fā)布到線上的可執(zhí)行 JavaScrip、CSS叠赐、HTML 代碼欲账,包括如下內(nèi)容屡江。

代碼轉(zhuǎn)換:TypeScript 編譯成 JavaScript、SCSS 編譯成 CSS 等赛不。
文件優(yōu)化:壓縮 JavaScript惩嘉、CSS、HTML 代碼踢故,壓縮合并圖片等文黎。
代碼分割:提取多個(gè)頁面的公共代碼、提取首屏不需要執(zhí)行部分的代碼讓其異步加載殿较。
模塊合并:在采用模塊化的項(xiàng)目里會有很多個(gè)模塊和文件耸峭,需要構(gòu)建功能把模塊分類合并成一個(gè)文件。
自動刷新:監(jiān)聽本地源代碼的變化淋纲,自動重新構(gòu)建劳闹、刷新瀏覽器。
代碼校驗(yàn):在代碼被提交到倉庫前需要校驗(yàn)代碼是否符合規(guī)范洽瞬,以及單元測試是否通過本涕。
自動發(fā)布:更新完代碼后,自動構(gòu)建出線上發(fā)布代碼并傳輸給發(fā)布系統(tǒng)伙窃。
構(gòu)建其實(shí)是工程化菩颖、自動化思想在前端開發(fā)中的體現(xiàn),把一系列流程用代碼去實(shí)現(xiàn)为障,讓代碼自動化地執(zhí)行這一系列復(fù)雜的流程晦闰。 構(gòu)建給前端開發(fā)注入了更大的活力,解放了我們的生產(chǎn)力产场。

Ready? GO

mkdir webpack-start
cd webpack-start
npm init

然后繼續(xù)舞竿,配置webpack (時(shí)間就是金錢京景,建議使用cnpm,當(dāng)然土豪可以忽略~)

npm install webpack webpack-cli -D
  • 創(chuàng)建src

  • 創(chuàng)建dist

    • 創(chuàng)建index.html
  • 創(chuàng)建文件webpack.config.js

  • 配置文件webpack.config.js

    • entry:配置入口文件的地址
    • output:配置出口文件的地址
    • module:配置模塊,主要用來配置不同文件的加載器
    • plugins:配置插件
    • devServer:配置開發(fā)服務(wù)器

webpack.config.js

let path = require('path')
module.exports = {
  entry: './src/index.js',
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  module: {},
  plugins: []
}

在src文件夾創(chuàng)建 index.js 和 b.js
我的目錄結(jié)構(gòu):


image.png

然后當(dāng)前命令行輸入:

npx webpack --mode development

執(zhí)行后骗奖,dist多一個(gè)bundle.js确徙,哇成功了,执桌,這個(gè)就是我們的webpack打包文件


image.png

透徹一點(diǎn)鄙皇,我們看看webpack到底做了什么?

(function(modules) {
  ... //此處省略 
})({
  "./src/b.js": (function(module, exports, __webpack_require__) {

    eval("我們的代碼");
    
    /***/ })
    
    /******/ }),
    "./src/index.js": (function(module, exports, __webpack_require__) {

      eval("我們的代碼");
      
      /***/ })
      
      /******/ }),

})

可以看出仰挣,傳進(jìn)去的modules 就是一個(gè)對象伴逸,其中我們js路徑作為key : val是相對應(yīng)的value

函數(shù)里面就是webpack做的處理,其實(shí)里面主要是聲明了一個(gè) require方法webpack_require膘壶,
1错蝴,首先判斷緩存里是否已經(jīng)有了洲愤,表示模塊加載過了,直接返回
2顷锰,創(chuàng)建一個(gè)新的模塊 ---并且放到緩存----執(zhí)行模塊函數(shù)----標(biāo)記模塊為加載過的 ----返回模塊的導(dǎo)出對象

了解基本原理柬赐,來,我們開始干大事了~~

配置開發(fā)服務(wù)器

npm i webpack-dev-server –D

在webpack.config.js文件中配置一下官紫,

    contentBase: path.resolve(__dirname, 'dist'),
    host: "localhost",
    compress: true,
    port: 6039,

值得注意的是肛宋,webpack編譯后的產(chǎn)出文件(本案例的bundle.js)是在內(nèi)存的,打包后刪除文件bundle.js束世,還是可以訪問的
后面會繼續(xù)更新

  • 支持加載css文件
  • 自動產(chǎn)出html
  • 編譯less 和 sass
  • 處理CSS3屬性前綴
  • 轉(zhuǎn)義ES6/ES7/JSX
  • 服務(wù)器代理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酝陈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子良狈,更是在濱河造成了極大的恐慌后添,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件薪丁,死亡現(xiàn)場離奇詭異遇西,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)严嗜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門粱檀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漫玄,你說我怎么就攤上這事茄蚯。” “怎么了睦优?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵渗常,是天一觀的道長。 經(jīng)常有香客問我汗盘,道長皱碘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任隐孽,我火速辦了婚禮癌椿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菱阵。我一直安慰自己踢俄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布晴及。 她就那樣靜靜地躺著都办,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脆丁,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天世舰,我揣著相機(jī)與錄音,去河邊找鬼槽卫。 笑死跟压,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歼培。 我是一名探鬼主播震蒋,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼躲庄!你這毒婦竟也來了查剖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤噪窘,失蹤者是張志新(化名)和其女友劉穎笋庄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倔监,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡直砂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浩习。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片静暂。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谱秽,靈堂內(nèi)的尸體忽然破棺而出洽蛀,到底是詐尸還是另有隱情,我是刑警寧澤疟赊,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布郊供,位于F島的核電站,受9級特大地震影響近哟,放射性物質(zhì)發(fā)生泄漏驮审。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一椅挣、第九天 我趴在偏房一處隱蔽的房頂上張望头岔。 院中可真熱鬧塔拳,春花似錦鼠证、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春荠列,著一層夾襖步出監(jiān)牢的瞬間类浪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工肌似, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留费就,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓川队,卻偏偏與公主長得像力细,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子固额,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

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

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載啄糙。 webpack介紹和使用 一笛臣、webpack介紹 1、由來 ...
    it筱竹閱讀 11,142評論 0 21
  • 最近在學(xué)習(xí) Webpack,網(wǎng)上大多數(shù)入門教程都是基于 Webpack 1.x 版本的,我學(xué)習(xí) Webpack 的...
    My_Oh_My閱讀 8,187評論 40 247
  • GitChat技術(shù)雜談 前言 本文較長迈套,為了節(jié)省你的閱讀時(shí)間捐祠,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,697評論 7 110
  • 目錄第1章 webpack簡介 11.1 webpack是什么桑李? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,737評論 0 1
  • 在現(xiàn)在的前端開發(fā)中踱蛀,前后端分離、模塊化開發(fā)贵白、版本控制率拒、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,445評論 1 32