簡(jiǎn)書處女作markdown的使用

前端開發(fā)和其他開發(fā)工作的主要區(qū)別坑质,首先是前端是基于多語言患雇、多層次的編碼和組織工作,其次前端產(chǎn)品的交付是基于瀏覽器淮野,這些資源是通過增量加載的方式運(yùn)行到瀏覽器端捧书,如何在開發(fā)環(huán)境組織好這些碎片化的代碼和資源吹泡,并且保證他們?cè)跒g覽器端快速、優(yōu)雅的加載和更新经瓷,就需要一個(gè)模塊化系統(tǒng)爆哑,這個(gè)理想中的模塊化系統(tǒng)是前端工程師多年來一直探索的難題。

Gulp

Gulp就是為了規(guī)范前端開發(fā)流程舆吮,實(shí)現(xiàn)前后端分離揭朝、模塊化開發(fā)、版本控制色冀、文件合并與壓縮潭袱、mock數(shù)據(jù)等功能的一個(gè)前端自動(dòng)化構(gòu)建工具。說的形象點(diǎn)锋恬,“Gulp就像是一個(gè)產(chǎn)品的流水線屯换,整個(gè)產(chǎn)品從無到有,都要受流水線的控制伶氢,在流水線上我們可以對(duì)產(chǎn)品進(jìn)行管理趟径”窭簦”

另外癣防,Gulp是通過task對(duì)整個(gè)開發(fā)過程進(jìn)行構(gòu)建。

Webpack

Webpack 是當(dāng)下最熱門的前端資源模塊化管理和打包工具掌眠。它可以將許多松散的模塊按照依賴和規(guī)則打包成符合生產(chǎn)環(huán)境部署的前端資源蕾盯。還可以將按需加載的模塊進(jìn)行代碼分隔,等到實(shí)際需要的時(shí)候再異步加載蓝丙。通過 loader的轉(zhuǎn)換级遭,任何形式的資源都可以視作模塊,比如 CommonJs 模塊渺尘、AMD 模塊挫鸽、ES6 模塊、CSS鸥跟、圖片丢郊、JSON、Coffeescript医咨、LESS 等枫匾。

Gulp和Webpack功能實(shí)現(xiàn)對(duì)比

簡(jiǎn)單介紹了一下Gulp和Webpack的概念性的問題和大環(huán)境,接下來進(jìn)入本文的主題拟淮,對(duì)比一下Gulp和Webpack的優(yōu)缺點(diǎn)干茉。將從基本概念、模塊化開發(fā)很泊、文件合并與壓縮角虫、啟動(dòng)本地Server沾谓、mock數(shù)據(jù)、版本控制幾個(gè)方面對(duì)Gulp和Webpack進(jìn)行對(duì)比戳鹅。

基本概念

首先從概念上搏屑,我們可以清楚的看出,Gulp和Webpack的側(cè)重點(diǎn)是不同的粉楚。

Gulp側(cè)重于前端開發(fā)的整個(gè)過程的控制管理(像是流水線)辣恋,我們可以通過給gulp配置不通的task(通過Gulp中的gulp.task()方法配置,比如啟動(dòng)server模软、sass/less預(yù)編譯伟骨、文件的合并壓縮等等)來讓gulp實(shí)現(xiàn)不同的功能,從而構(gòu)建整個(gè)前端開發(fā)流程燃异。

Webpack有人也稱之為模塊打包機(jī)携狭,由此也可以看出Webpack更側(cè)重于模塊打包,當(dāng)然我們可以把開發(fā)中的所有資源(圖片回俐、js文件逛腿、css文件等)都可以看成模塊,最初Webpack本身就是為前端JS代碼打包而設(shè)計(jì)的仅颇,后來被擴(kuò)展到其他資源的打包處理单默。Webpack是通過loader(加載器)和plugins(插件)對(duì)資源進(jìn)行處理的。

另外我們知道Gulp是對(duì)整個(gè)過程進(jìn)行控制忘瓦,所以在其配置文件(gulpfile.js)中配置的每一個(gè)task對(duì)項(xiàng)目中該task配置路徑下所有的資源都可以管理搁廓。
Webpack則不是這樣管理資源的,它是根據(jù)模塊的依賴關(guān)系進(jìn)行靜態(tài)分析耕皮,然后將這些模塊按照指定的規(guī)則生成對(duì)應(yīng)的靜態(tài)資源

模塊化開發(fā)

所謂的前端模塊化開發(fā)是指境蜕,在開發(fā)的時(shí)候,把不通的資源文件按照他的具體用途進(jìn)行分類管理凌停,在使用的時(shí)候利用CommonJS粱年、AMD、CMD等規(guī)范將這些資源文件引入到當(dāng)前文件中罚拟。然后在測(cè)試或者最后上線的時(shí)候台诗,將這些資源文件按照一定的要求進(jìn)行壓縮合并再加上版本控制處理。即對(duì)內(nèi)容的管理舟舒,是為了解耦合拉庶。

在實(shí)際開發(fā)過程中,在src目錄下工作秃励,html氏仗、js和css等文件通過gulp的task配置,執(zhí)行合并和壓縮后輸出到build目錄下。在詳細(xì)一點(diǎn)就是:

1. 創(chuàng)建主頁html文件
2. 創(chuàng)建與之對(duì)應(yīng)的app.js入口文件和app.scss入口文件皆尔。這兩個(gè)文件只通過CommonJS規(guī)范引入各自views文件中自定義的js(或scss)文件呐舔,具體邏輯不寫此文件中。
3. 在views目錄下編寫js(或css)文件的邏輯代碼慷蠕,其中如果多個(gè)文件需要公共邏輯或者工具方法珊拼,就可以抽離出來在util文件夾下創(chuàng)建對(duì)應(yīng)的公共方法,然后在views中需要的js(或css)文件中通過CommonJS規(guī)范引入使用流炕。libs目錄下的第三方庫(kù)或框架也是這個(gè)思想去引用澎现。
4. scripts目錄下的tpls文件是用來放置html模板的,引用方式和引用libs相同每辟。

webpack的模塊化實(shí)現(xiàn)和Gulp的基本相同剑辫,只不過實(shí)現(xiàn)過程中使用到的插件或者說模塊不同,配置不同而已渠欺。對(duì)于解決webpack文件之間的依賴關(guān)系妹蔽,可以使用extract-text-webpack-plugin的模塊將css文件從js文件中剝離出來。

文件合并與壓縮

上面的模塊化中挠将,模塊化其實(shí)很大一部分是在做文件的合并與壓縮操作胳岂。
Webpack應(yīng)該比Gulp更擅長(zhǎng)文件合并和壓縮,畢竟人家被稱為模塊打包機(jī)舔稀。

Gulp可以對(duì)css文件以及js文件進(jìn)行合并壓縮處理乳丰,而Webpack可以實(shí)現(xiàn)對(duì)css文件,js文件镶蹋,html文件等進(jìn)行合并壓縮和圖片的壓縮成艘,還可以對(duì)js文件進(jìn)行編譯(如es6–>es5,react jsx)等等贺归,這些都是通過Webpack的loader實(shí)現(xiàn)的,當(dāng)然這些也可以加入到Gulp中断箫,畢竟Gulp把Webpack當(dāng)做一個(gè)模塊拂酣,通過gulp-webpack都引入了。

gulp webpack
css的壓縮 gulp-minify-css uglifyJS(style-loader!css-loader 讀取和插入)
js合并壓縮 gulp-uglify和gulp-concat uglifyJS
html合并壓縮 HtmlWebpackPlugin(創(chuàng)建index.html)html-minifier
sass/less預(yù)編譯 gulp-sass 和gulp-less scss-loader仲义、less-loader
圖片的壓縮 gulp-imagemin和imagemin-pngquant url-loader?limit=8192

啟動(dòng)server

gulp啟動(dòng)server: gulp-server模塊

livereload:true屬性只是監(jiān)控到我們修改文件后刷新瀏覽器重新請(qǐng)求文件

webpack啟動(dòng)server: webpack-dev-server模塊
一是為靜態(tài)文件提供server服務(wù)婶熬,二是自動(dòng)刷新和熱替換(HMR)

webpack-dev-server --inline --hot

mock數(shù)據(jù)

Gulp中對(duì)mock數(shù)據(jù)的實(shí)現(xiàn)使通過NodeJS內(nèi)置的fs模塊和url模塊實(shí)現(xiàn)的。
具體來說埃撵,就是通過NodeJS攔截http請(qǐng)求赵颅,根據(jù)請(qǐng)求URL來模擬后端做出處理后返回不同的數(shù)據(jù)。
webpack通過json-server來實(shí)現(xiàn)暂刘,它的實(shí)現(xiàn)原理就是饺谬,啟動(dòng)一個(gè)本地3000端口作為mock數(shù)據(jù)的端口,然后我們?cè)赪ebpack中配置一個(gè)代理谣拣,讓所有請(qǐng)求代理到3000端口上去募寨,就可以獲取到數(shù)據(jù)了族展。

版本控制

gulp通過gulp-rev和gulp-rev-collector模塊,前者用于生成文件的MD5碼文件和按MD5碼命名的資源文件拔鹰,后者是利用MD5碼仪缸,對(duì)文件名進(jìn)行替換。
Webpack中需要版本控制的有css列肢、js文件恰画,不過Webpack的版本控制只實(shí)現(xiàn)了將css、js文件添加hash值方式命名的文件方式瓷马,修改引用路徑中的文件名需手動(dòng)實(shí)現(xiàn)锣尉。
不過實(shí)現(xiàn)確實(shí)很簡(jiǎn)單,只需要將webpack.config.js配置文件中的output.filename和plugins中的輸出文件名稱修改一下即可决采。

總結(jié)

Gulp側(cè)重整個(gè)過程的控制自沧,Webpack在模塊打包方面有特別出眾。所以树瞭,Gulp + Webpack 組合使用更方便拇厢。

參考自:兩者對(duì)比
webpack
gulp
未閱讀:
gulp+webpack1
gulp+webpack2
gulp+webpack3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市晒喷,隨后出現(xiàn)的幾起案子孝偎,更是在濱河造成了極大的恐慌,老刑警劉巖凉敲,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衣盾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爷抓,警方通過查閱死者的電腦和手機(jī)势决,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓝撇,“玉大人果复,你說我怎么就攤上這事〔巢” “怎么了虽抄?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)独柑。 經(jīng)常有香客問我迈窟,道長(zhǎng),這世上最難降的妖魔是什么忌栅? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任车酣,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骇径。我一直安慰自己躯肌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布破衔。 她就那樣靜靜地躺著清女,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晰筛。 梳的紋絲不亂的頭發(fā)上嫡丙,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音读第,去河邊找鬼曙博。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怜瞒,可吹牛的內(nèi)容都是我干的父泳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼吴汪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惠窄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起漾橙,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤杆融,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后霜运,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脾歇,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年淘捡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了藕各。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡案淋,死狀恐怖座韵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踢京,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布宦棺,位于F島的核電站瓣距,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏代咸。R本人自食惡果不足惜蹈丸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逻杖,春花似錦奋岁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至够话,卻和暖如春蓝翰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背女嘲。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工畜份, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欣尼。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓爆雹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親愕鼓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钙态,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 關(guān)于簡(jiǎn)書 Markdown Markdown 語法的目標(biāo): 成為一種適用于網(wǎng)絡(luò)的書寫語言。本文的目的:使讀者...
    白老師課堂閱讀 15,412評(píng)論 24 177
  • *一拒啰、Markdown是什么 * Markdown是一種輕量級(jí)的標(biāo)記語言驯绎,使用的標(biāo)記語法非常簡(jiǎn)單,它可以使用純文本...
    乘風(fēng)破浪55閱讀 945評(píng)論 0 2
  • 1. 斜體和粗體 代碼: 顯示效果: 這是一段斜體 這是一段粗體 這是一段加粗斜體 這是一段刪除線 2. 分級(jí)標(biāo)題...
    泊牧閱讀 2,331評(píng)論 0 2
  • 接觸簡(jiǎn)書也有段時(shí)間了谋旦,但是一直使用的編輯文檔格式是富文本剩失,對(duì)于代碼格式的顯示真的大寫的尷尬,今天看了一篇大神的分享...
    毹毹閱讀 4,408評(píng)論 5 14
  • 難題需要一個(gè)容器只在內(nèi)側(cè)有圓角册着,但邊框或描邊的四個(gè)角在外部仍保持直角的形狀拴孤。 使用兩個(gè)元素: 使用一個(gè)元素:
    _菡曳_閱讀 266評(píng)論 0 0