前端構(gòu)建工具:webpack從安裝到起飛

1.安裝npm

? ?不管你想使用grunt,還是gulp,還是webpack,你都要用到npm,相信大家都對(duì)此不陌生了,npm是什么東東呢?npm其實(shí)是Node.js的包管理工具(package manager),因?yàn)槲覀兪褂酶鞣N框架會(huì)依賴(lài)需要多js代碼包,而如果需要就到網(wǎng)上搜索下載解壓在使用,會(huì)非常非常繁瑣麻煩,所以npm就應(yīng)運(yùn)而生了,它是一個(gè)集中管理的工具,大家都會(huì)把自己開(kāi)的模塊打包后上傳到npm官網(wǎng),如果要使用直接通過(guò)npm下載安裝即可。

? ?那么我們?cè)趺窗惭bnpm,其實(shí)我們?cè)诎惭bnode.js的時(shí)候npm就已經(jīng)安裝好了,所以我們要先安裝node.js,安裝完畢后我們就可以在命令行中輸入npm -v,來(lái)查看npm版本。(命令行工具我在mac下使用的是iTerm2,windows可以安裝git bash)

npm -v


2.什么是webpack

什么是webpack,它有什么優(yōu)點(diǎn)?

如果你有過(guò)gulp或grunt的使用經(jīng)驗(yàn),就不難理解webpack是個(gè)什么東東,webpack是一個(gè)前端工具,可以讓各個(gè)模塊進(jìn)行加載、預(yù)處理,再進(jìn)行打包,它有g(shù)ulp和grunt的大部分基本功能,它的最大區(qū)別就是提供了模塊化解決方案,可以把各種資源作為模塊來(lái)使用和處理。

webpack的優(yōu)點(diǎn)如下:

1. webpack 遵循commonJS 的形式,但對(duì) AMD/CMD 的支持也很全面,方便舊項(xiàng)目進(jìn)行代碼遷移。

2. 能被模塊化的不僅僅是 JS ,所有的靜態(tài)資源,例如css,圖片等都能模塊化,即以require的方式引入。

3. 開(kāi)發(fā)便捷,能替代部分 grunt/gulp 的工作,比如打包、壓縮混淆、圖片轉(zhuǎn)base64等。

有一點(diǎn)注意的就是webpack的思路是把我們所有的require資源都整合集成到一個(gè)js文件中,我們通常命名為bundle.js

3.安裝和配置webpack

接下來(lái)我們就開(kāi)始一步一步的安裝使用webpack。(以下以mac為例)

我們先創(chuàng)建項(xiàng)目目錄結(jié)構(gòu),根目錄是webpack-demo,結(jié)構(gòu)如下:(源碼下載在文末)

項(xiàng)目結(jié)構(gòu)

app文件夾下放置我們的開(kāi)發(fā)文件,比如 index.scss文件和主邏輯main.js文件,以及作為模塊文件的module1.js,將來(lái)main.js和module1.js都會(huì)整合到public目錄下的bundle.js中,我們的index.html直接引用bundle.js即可。public目錄就是瀏覽器執(zhí)行需要的文件,包括index.html、將來(lái)index.sass生成的index.css和bundle.js。webpack.config.js是webpack的配置文件,稍后會(huì)詳細(xì)說(shuō)明。

原材料準(zhǔn)備好了,接下來(lái)我們就開(kāi)始正式安裝webpack了。

1.我們首先要在根目錄下生成package.json文件,它會(huì)顯示以后我們通過(guò)npm安裝的各種依賴(lài)包,我們通過(guò)終端進(jìn)入根目錄,執(zhí)行:npm init


npm init

然后終端會(huì)讓我們輸入一堆信息,隨便寫(xiě)即可。最后輸入yes確認(rèn),會(huì)發(fā)現(xiàn)我們的根目錄下自動(dòng)生成了一個(gè)package.json文件


package.json

內(nèi)容就是一堆json數(shù)據(jù),基本就是我們剛才在終端里輸入的信息,大致如下:

package.json

package.json生成好了我們先放一放。

2.接下來(lái)通過(guò)全局安裝webpack

在終端執(zhí)行cd -- 退回到全局,然后執(zhí)行:(sudo) npm install -g webpack,mac下報(bào)錯(cuò)的話(huà)前面可能需要加sudo獲取管理員權(quán)限(下同)。

這樣就安裝好了webpack,可以再全局通過(guò)webpack -v來(lái)查看是否安裝成功。

3.然后我們進(jìn)入項(xiàng)目根目錄局部安裝webpack,進(jìn)入./webpack-demo,執(zhí)行:npm install webpack --save-dev

npm install webpack --save-dev

如果看到了這一頁(yè)說(shuō)明局部安裝webpack成功了。此時(shí)根目錄下會(huì)出現(xiàn)一個(gè)node_modules文件夾。


node_modules

以后我們?cè)诟夸浵峦ㄟ^(guò)npm安裝的各種依賴(lài)包都會(huì)默認(rèn)安裝到這個(gè)文件夾下面。

現(xiàn)在我們項(xiàng)目的webpack框架就準(zhǔn)備好了,接下來(lái)我們要使用它來(lái)處理各種東西了,拿最常見(jiàn)的css預(yù)處理來(lái)說(shuō)吧,我個(gè)人常用sass,那么怎么用webpack來(lái)處理sass為我們所用呢,現(xiàn)在就來(lái)說(shuō)說(shuō)loader加載器。

4. loader加載器。

webpack是通過(guò)loader加載器來(lái)管理使用各種插件和工具的,比如我們要使用sass,就要通過(guò)npm安裝sass-loader加載器,然后在之前提到的 webpack.config.js文件中進(jìn)行配置使用,我們要是使用es6語(yǔ)法,就要安裝babel-loader來(lái)解析成js語(yǔ)法。接下來(lái)以sass-loader為例,

在項(xiàng)目根目錄下執(zhí)行:npm install sass-loader --save-dev


npm install sass-loader --save-dev

如上圖,提示我們已經(jīng)安裝成功了,此時(shí)在看package.json文件,會(huì)發(fā)現(xiàn)與之前有所不同:


package.json

沒(méi)錯(cuò),它顯示了我們剛才局部安裝的webpack和sass-loader依賴(lài)項(xiàng)。文件默認(rèn)安裝到了node_modules目錄下。表示我們已經(jīng)可以使用sass-loader了。通常對(duì)css的處理我們還要在安裝style-loader和css-loader。

有一點(diǎn)注意的是,默認(rèn)sass-loader編譯后的css會(huì)直接結(jié)成到index.html文件的header中去,而我們一般開(kāi)發(fā)中都期望提取出一個(gè)css文件,再在html中l(wèi)ink引入。所以我們還要用到webpack的plugins插件項(xiàng)目,再安裝一個(gè)插件extract-text-webpack-plugin。此外還需要安裝 style-loader, ? css-loader。

繼續(xù)執(zhí)行: ?npm install style-loader --save-dev

? ? ? ? ? ? ? ? ? ?npm install css-loader --save-dev

? ? ? ? ? ? ? ? ? ?npm install extract-text-webpack-plugin --save-dev

可以看到


package.json

style-loader和css-loader 和 extract-text-webpack-plugin安裝完畢。

接下來(lái)終于開(kāi)始看在webpack.config.js中怎樣進(jìn)行配置使用了。

我們的小飛機(jī)組裝完畢,進(jìn)入調(diào)試階段。

5. sass-loader

打開(kāi)webpack.config.js文件,進(jìn)行下圖配置:

webpack.config.js

entry是頁(yè)面中的入口文件,比如我這邊的入口文件時(shí)main.js

output:是指頁(yè)面通過(guò)webpack打包后生成的目標(biāo)文件放在什么地方去,我這邊是在根目錄下生成public文件夾,指示webpack生成bundle.js放到里面

module.loaders:是文件的加載器配置,我們剛才安裝了sass-loader,現(xiàn)在要通過(guò)extract-text-webpack-plugin插件將編譯完成的css單獨(dú)提取出來(lái)供我們使用。具體配置如圖。

接下來(lái)我們看看index.html和index.scss以及main.js是怎樣的。

html:


index.html

因?yàn)槲覀冏罱K引用的是public下生成的bundle.js ?和 index.css,所以如圖寫(xiě)引用路徑。這沒(méi)啥好說(shuō)的了。

scss:


index.scss

這里就直接寫(xiě)我們開(kāi)發(fā)中的sass代碼,坐等webpack編譯成index.css輸出到public中。

main.js


main.js

主js文件里,我們只引入scss文件,用強(qiáng)大的require語(yǔ)法簡(jiǎn)單粗暴。

藍(lán)后,我們就可以在命令行執(zhí)行 webpack -w 來(lái)啟動(dòng)webpack了!

關(guān)于webpack的啟動(dòng)方式:

webpack ? ? ? ? // 最基本的啟動(dòng)webpack的方法

webpack -w ? ? ?// 提供watch方法;實(shí)時(shí)進(jìn)行打包更新

webpack -p ? ? ?// 對(duì)打包后的文件進(jìn)行壓縮

webpack -d ? ? ?// 提供source map,方便調(diào)式代碼

小飛機(jī),終于要起飛了~!

藍(lán)而。。。。。。


error

一片片的紅海啊。。有點(diǎn)刺眼,我們看看發(fā)生了什么,原來(lái)是提示沒(méi)有安裝node-sass模塊,那么我們繼續(xù)安裝:

npm install node-sass --save-dev

安裝報(bào)錯(cuò)提示我要安裝xcode,經(jīng)查node-sass依賴(lài)xcode安裝時(shí)一并安裝的一些文件,所以我又安裝的xcode,再次運(yùn)行,安裝成功。

藍(lán)后,

再次執(zhí)行 webpack -w:


webpack -w

感動(dòng)哭。。終于綠了,說(shuō)明我們的webpack啟動(dòng)成功了,這時(shí)候再看文件目錄,發(fā)現(xiàn)public目錄下多了index.css和bundle.js,說(shuō)明打包成功:


yes

我們直接瀏覽器打開(kāi)index.html來(lái)看一看頁(yè)面是否順利生效。

index.html

看來(lái)是生效了,控制臺(tái)也沒(méi)有報(bào)錯(cuò)。說(shuō)明我們的webpack對(duì)sass和js的編譯和打包順利完成!

6. 接下來(lái)我們看一下js作為模塊怎樣來(lái)引入使用

我們之前新建了module1.js,我們把這個(gè)js文件作為一個(gè)模塊來(lái)引入我們的main.js。編輯module1.js:


module1.js

我們先在控制臺(tái)打印一串文本 hello webpack,然后在用exports方式暴露出兩個(gè)方法供外部調(diào)用。

接下來(lái)在main.js中require:


main.js

我們?cè)趍ain.js中引入模塊,然后賦給變量 mod,mod就可以調(diào)用模塊暴露出來(lái)的方法!接下來(lái)就是見(jiàn)證奇跡的時(shí)刻:

html

看到這里我已經(jīng)內(nèi)牛滿(mǎn)面...

我們的小飛機(jī)終于起飛了...

至此,webpack基本跑起來(lái)了,當(dāng)然,我們還可以把vue、browserSync集成到webpack中,這里就先不說(shuō)了,改日再另起文章分別說(shuō)說(shuō)browserSync和vue怎樣集成到webpack中。

4.最后

說(shuō)實(shí)話(huà)這是我的第一篇正式內(nèi)容的文章,以前傻乎乎的就沒(méi)想過(guò)總結(jié)點(diǎn)什么,當(dāng)然上面的內(nèi)容也很簡(jiǎn)陋,介紹的不詳細(xì),也很可能會(huì)有不嚴(yán)謹(jǐn)或錯(cuò)誤之處,限于本人水平,大家有不明白的地方可以搜一下其他大牛的經(jīng)驗(yàn),提出來(lái)一起進(jìn)步。最近學(xué)習(xí)webpack也是翻了很多資料,接下來(lái)還要繼續(xù)深入學(xué)習(xí),前端之路,漸行漸遠(yuǎn)。。。不說(shuō)了,要下班了,我還要去趕班車(chē)...886下了

附本文github源碼鏈接:點(diǎn)此下載

用git克隆到本地:git clone https://github.com/lupinge/webpack-demo.git

打開(kāi)終端命令行工具進(jìn)入到對(duì)應(yīng)目錄webpack-demo直接執(zhí)行 webpack -w 即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • GitChat技術(shù)雜談 前言 本文較長(zhǎng),為了節(jié)省你的閱讀時(shí)間,在文前列寫(xiě)作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,916評(píng)論 7 110
  • 無(wú)意中看到zhangwnag大佬分享的webpack教程感覺(jué)受益匪淺,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,383評(píng)論 7 35
  • 在現(xiàn)在的前端開(kāi)發(fā)中,前后端分離、模塊化開(kāi)發(fā)、版本控制、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開(kāi)始...
    Charlot閱讀 5,690評(píng)論 1 32
  • 最近在學(xué)習(xí) Webpack,網(wǎng)上大多數(shù)入門(mén)教程都是基于 Webpack 1.x 版本的,我學(xué)習(xí) Webpack 的...
    My_Oh_My閱讀 8,345評(píng)論 40 247
  • 文 / 鐘頡 3月底的一天,中午下班后,說(shuō)好的一塊去見(jiàn),免得尷尬,結(jié)果介紹的朋友以各種借口逃跑了,礙于抹不掉的面子...
    鐘頡閱讀 273評(píng)論 0 2

友情鏈接更多精彩內(nèi)容