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

1.安裝npm

? ?不管你想使用grunt,還是gulp俐填,還是webpack终佛,你都要用到npm俊嗽,相信大家都對此不陌生了,npm是什么東東呢铃彰?npm其實是Node.js的包管理工具(package manager)绍豁,因為我們使用各種框架會依賴需要多js代碼包,而如果需要就到網(wǎng)上搜索下載解壓在使用牙捉,會非常非常繁瑣麻煩竹揍,所以npm就應(yīng)運而生了,它是一個集中管理的工具邪铲,大家都會把自己開的模塊打包后上傳到npm官網(wǎng)芬位,如果要使用直接通過npm下載安裝即可。

? ?那么我們怎么安裝npm带到,其實我們在安裝node.js的時候npm就已經(jīng)安裝好了昧碉,所以我們要先安裝node.js,安裝完畢后我們就可以在命令行中輸入npm -v揽惹,來查看npm版本被饿。(命令行工具我在mac下使用的是iTerm2,windows可以安裝git bash)

npm -v


2.什么是webpack

什么是webpack搪搏,它有什么優(yōu)點狭握?

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

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

1. webpack 遵循commonJS 的形式愿题,但對 AMD/CMD 的支持也很全面损俭,方便舊項目進行代碼遷移蛙奖。

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

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

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

3.安裝和配置webpack

接下來我們就開始一步一步的安裝使用webpack受神。(以下以mac為例)

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

項目結(jié)構(gòu)

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

原材料準(zhǔn)備好了,接下來我們就開始正式安裝webpack了倒戏。

1.我們首先要在根目錄下生成package.json文件怠噪,它會顯示以后我們通過npm安裝的各種依賴包,我們通過終端進入根目錄杜跷,執(zhí)行:npm init


npm init

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


package.json

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

package.json

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

2.接下來通過全局安裝webpack

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

這樣就安裝好了webpack近范,可以再全局通過webpack -v來查看是否安裝成功嘶摊。

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

npm install webpack --save-dev

如果看到了這一頁說明局部安裝webpack成功了叶堆。此時根目錄下會出現(xiàn)一個node_modules文件夾。


node_modules

以后我們在根目錄下通過npm安裝的各種依賴包都會默認(rèn)安裝到這個文件夾下面斥杜。

現(xiàn)在我們項目的webpack框架就準(zhǔn)備好了蹂空,接下來我們要使用它來處理各種東西了,拿最常見的css預(yù)處理來說吧果录,我個人常用sass上枕,那么怎么用webpack來處理sass為我們所用呢,現(xiàn)在就來說說loader加載器弱恒。

4. loader加載器辨萍。

webpack是通過loader加載器來管理使用各種插件和工具的,比如我們要使用sass返弹,就要通過npm安裝sass-loader加載器锈玉,然后在之前提到的 webpack.config.js文件中進行配置使用,我們要是使用es6語法义起,就要安裝babel-loader來解析成js語法拉背。接下來以sass-loader為例,

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


npm install sass-loader --save-dev

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


package.json

沒錯齐蔽,它顯示了我們剛才局部安裝的webpack和sass-loader依賴項两疚。文件默認(rèn)安裝到了node_modules目錄下。表示我們已經(jīng)可以使用sass-loader了含滴。通常對css的處理我們還要在安裝style-loader和css-loader诱渤。

有一點注意的是,默認(rèn)sass-loader編譯后的css會直接結(jié)成到index.html文件的header中去谈况,而我們一般開發(fā)中都期望提取出一個css文件勺美,再在html中l(wèi)ink引入。所以我們還要用到webpack的plugins插件項目碑韵,再安裝一個插件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安裝完畢泼诱。

接下來終于開始看在webpack.config.js中怎樣進行配置使用了坛掠。

我們的小飛機組裝完畢赊锚,進入調(diào)試階段治筒。

5. sass-loader

打開webpack.config.js文件屉栓,進行下圖配置:

webpack.config.js

entry是頁面中的入口文件,比如我這邊的入口文件時main.js

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

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

接下來我們看看index.html和index.scss以及main.js是怎樣的蜈抓。

html:


index.html

因為我們最終引用的是public下生成的bundle.js ?和 index.css启绰,所以如圖寫引用路徑。這沒啥好說的了沟使。

scss:


index.scss

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

main.js


main.js

主js文件里腊嗡,我們只引入scss文件着倾,用強大的require語法簡單粗暴。

藍(lán)后燕少,我們就可以在命令行執(zhí)行 webpack -w 來啟動webpack了卡者!

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

webpack ? ? ? ? // 最基本的啟動webpack的方法

webpack -w ? ? ?// 提供watch方法;實時進行打包更新

webpack -p ? ? ?// 對打包后的文件進行壓縮

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

小飛機崇决,終于要起飛了~!

藍(lán)而底挫。嗽桩。。凄敢。碌冶。。


error

一片片的紅海啊涝缝。扑庞。有點刺眼,我們看看發(fā)生了什么拒逮,原來是提示沒有安裝node-sass模塊罐氨,那么我們繼續(xù)安裝:

npm install node-sass --save-dev

安裝報錯提示我要安裝xcode,經(jīng)查node-sass依賴xcode安裝時一并安裝的一些文件滩援,所以我又安裝的xcode栅隐,再次運行,安裝成功。

藍(lán)后租悄,

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


webpack -w

感動哭谨究。。終于綠了泣棋,說明我們的webpack啟動成功了胶哲,這時候再看文件目錄,發(fā)現(xiàn)public目錄下多了index.css和bundle.js潭辈,說明打包成功:


yes

我們直接瀏覽器打開index.html來看一看頁面是否順利生效鸯屿。

index.html

看來是生效了,控制臺也沒有報錯把敢。說明我們的webpack對sass和js的編譯和打包順利完成寄摆!

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

我們之前新建了module1.js,我們把這個js文件作為一個模塊來引入我們的main.js修赞。編輯module1.js:


module1.js

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

接下來在main.js中require:


main.js

我們在main.js中引入模塊榔组,然后賦給變量 mod熙尉,mod就可以調(diào)用模塊暴露出來的方法!接下來就是見證奇跡的時刻:

html

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

我們的小飛機終于起飛了...

至此搓扯,webpack基本跑起來了检痰,當(dāng)然,我們還可以把vue锨推、browserSync集成到webpack中铅歼,這里就先不說了,改日再另起文章分別說說browserSync和vue怎樣集成到webpack中换可。

4.最后

說實話這是我的第一篇正式內(nèi)容的文章椎椰,以前傻乎乎的就沒想過總結(jié)點什么,當(dāng)然上面的內(nèi)容也很簡陋沾鳄,介紹的不詳細(xì)慨飘,也很可能會有不嚴(yán)謹(jǐn)或錯誤之處,限于本人水平译荞,大家有不明白的地方可以搜一下其他大牛的經(jīng)驗瓤的,提出來一起進步。最近學(xué)習(xí)webpack也是翻了很多資料吞歼,接下來還要繼續(xù)深入學(xué)習(xí)圈膏,前端之路,漸行漸遠(yuǎn)篙骡。稽坤。丈甸。不說了,要下班了尿褪,我還要去趕班車...886下了

附本文github源碼鏈接:點此下載

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

打開終端命令行工具進入到對應(yīng)目錄webpack-demo直接執(zhí)行 webpack -w 即可睦擂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茫多,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忽刽,老刑警劉巖天揖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異跪帝,居然都是意外死亡今膊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門伞剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斑唬,“玉大人,你說我怎么就攤上這事黎泣∷×酰” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵抒倚,是天一觀的道長褐着。 經(jīng)常有香客問我,道長托呕,這世上最難降的妖魔是什么含蓉? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮项郊,結(jié)果婚禮上馅扣,老公的妹妹穿的比我還像新娘。我一直安慰自己着降,他們只是感情好差油,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著任洞,像睡著了一般厌殉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侈咕,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天公罕,我揣著相機與錄音,去河邊找鬼耀销。 笑死楼眷,一個胖子當(dāng)著我的面吹牛铲汪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罐柳,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掌腰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了张吉?” 一聲冷哼從身側(cè)響起齿梁,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肮蛹,沒想到半個月后勺择,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡伦忠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年省核,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昆码。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡气忠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赋咽,到底是詐尸還是另有隱情旧噪,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布脓匿,位于F島的核電站舌菜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亦镶。R本人自食惡果不足惜日月,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缤骨。 院中可真熱鬧爱咬,春花似錦、人聲如沸绊起。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虱歪。三九已至蜂绎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笋鄙,已是汗流浹背师枣。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萧落,地道東北人践美。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓洗贰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陨倡。 傳聞我的和親對象是個殘疾皇子敛滋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

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