[Web前端][構(gòu)建工具]前端自動(dòng)化構(gòu)建工具介紹

“構(gòu)建工具是將本地源文件按照一定的邏輯規(guī)范角雷,編譯打包成瀏覽器識別的文件阅爽,然后推送到相應(yīng)服務(wù)器環(huán)境下供展示的一種前端工具顷蟆,工具的目的就是幫助開發(fā)者降低開發(fā)成本,使開發(fā)者更加專注業(yè)務(wù)邏輯開發(fā)本身衰絮】梗”

何為構(gòu)建咆畏?

把源代碼生成可執(zhí)行應(yīng)用程序的過程自動(dòng)化的程序,構(gòu)建包括編譯坚嗜、連接跟把代碼打包成可用的或可執(zhí)行的形式。
前端的構(gòu)建一般包括:

  • JS轉(zhuǎn)碼(使用Babel轉(zhuǎn)ES6或TypeScript自轉(zhuǎn)等)
  • CSS轉(zhuǎn)碼(Less或Sass轉(zhuǎn)Css)
  • 代碼或資源的合并與壓縮
  • 基礎(chǔ)檢查和各類測試
  • ……
    舉例說明:
  • 用 CoffeeScript/ES6 代替Javascript诗充,但是瀏覽器對這些語言是不支持或者支持得不完整的苍蔬,需要將其編譯成Javascript(ES5)
  • 用Less去寫CSS
  • 用Jade去寫HTML
  • 用Browserify去模塊化
  • 為非覆蓋部署的資源加MD5戳等

三類構(gòu)建工具

  • 模塊化打包類:Webpack
  • 任務(wù)流構(gòu)建類 :Gulp
  • 集合型工具類(腳手架):React CLI | Vue CLI | Angular CLI

本文主要介紹構(gòu)建工具

  • Npm Scripts
  • Gulp
  • Webpack

1.Npm Scripts(NPM腳本)

NPM是安裝Node時(shí)附帶的一個(gè)包管理器,腳本功能是 npm 內(nèi)置的最強(qiáng)大蝴蜓、最常用的功能之一碟绑。Npm Scripts(NPM腳本)是一個(gè)任務(wù)執(zhí)行者。

什么是NPM腳本茎匠?

定義在package.json里面的腳本格仲,就稱為 npm 腳本。
舉例說明:
在 package.json 文件里面使用 scripts 字段定義任務(wù)

{
    "scripts":{
        "dev": "node dev.js",
        "pub": "node build.js"
    }
}

上面代碼是package.json文件的一個(gè)片段诵冒,里面的scripts字段是一個(gè)對象凯肋。它的每一個(gè)屬性,對應(yīng)一段Shell腳本汽馋。
以上代碼定義了兩個(gè)任務(wù)侮东,dev 和 pub。
命令行下使用npm run命令豹芯,就可以執(zhí)行這段腳本悄雅。

$ npm run pub
# 等同于執(zhí)行
$ node build.js

優(yōu)點(diǎn):

npm scripts 的優(yōu)點(diǎn)是內(nèi)置,無需安裝其他依賴

缺點(diǎn):

功能太簡單铁蹈,雖然提供了 pre 和 post 兩個(gè)鉤子宽闲,但不能方便的管理多個(gè)任務(wù)之間的依賴。

npm使用指南:
http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html

2. Gulp

Gulp是一個(gè)基于流的自動(dòng)化構(gòu)建工具木缝。除了可以管理任務(wù)執(zhí)行任務(wù),還支持監(jiān)聽文件围辙、讀寫文件我碟。Gulp 被設(shè)計(jì)的非常簡單,只通過下面5個(gè)方法就可以支持幾乎所有構(gòu)建場景:

  • 通過 gulp.task 注冊一個(gè)任務(wù)姚建;
  • 通過 gulp.run 執(zhí)行任務(wù)矫俺;
  • 通過 gulp.watch 監(jiān)聽文件變化;
  • 通過 gulp.src 讀取文件掸冤;
  • 通過 gulp.dest 寫完文件厘托。

特點(diǎn)

引入了的概念,同時(shí)提供了一系列常用插件去處理流稿湿,流可以在插件之間傳遞

優(yōu)點(diǎn):

好用又不失靈活铅匹,既可以單獨(dú)完成構(gòu)建,也可以和其他工具搭配使用饺藤。

缺點(diǎn):

集成度不高包斑,要寫很多配置后才可以用流礁,無法做到開箱即用。

3. WebPack

Webpack 是一個(gè)打包模塊化的JavaScript的工具罗丰,在Webpack里一切文件皆模塊神帅,通過 loader 轉(zhuǎn)換文件,通過Plugin 注入鉤子萌抵,最后輸出由多個(gè)模塊組合成的文件找御。Webpack 專注于構(gòu)建模塊化項(xiàng)目。

一切文件绍填,如JavaScript霎桅、CSS、SCSS沐兰、圖片哆档、模板,對于Webpack 來說都是一個(gè)個(gè)模塊

四大核心要素:

entry: 配置入口文件住闯,即產(chǎn)生依賴關(guān)系圖的入口
output:文件的產(chǎn)出位置配置
loader:匹配文件的編譯過程
plugins:針對整個(gè)構(gòu)建打包流程的插件處理(文件壓縮瓜浸,dev環(huán)境的熱加載)

舉例說明:

module.exports = {
    // 所有模塊的入口,webpack從入口開始遞歸解析出所有依賴的模塊
    entry: './app.js',
    output: {
        // 將入口所依賴的所有模塊打包成一個(gè)文件 bundle.js 輸出
        filename: 'bundle.js'
    }
}

優(yōu)點(diǎn):

  • 專注于處理模塊化的項(xiàng)目比原,能做到開箱即用插佛、一步到位;
  • 可通過 Plugin 擴(kuò)展量窘,完整好用又不失靈活性雇寇;
  • 使用場景不局限于Web開發(fā);
  • 社區(qū)龐大活躍蚌铜,經(jīng)常引入緊跟時(shí)代發(fā)展的新特性锨侯,能為大多數(shù)場景找到已有的開源擴(kuò)展;
  • 良好的開發(fā)體驗(yàn)冬殃;

缺點(diǎn):

只能用于采用模塊化開發(fā)的項(xiàng)目囚痴。

參考:
https://juejin.im/entry/5ae5c8c9f265da0b9f400d8e

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市审葬,隨后出現(xiàn)的幾起案子深滚,更是在濱河造成了極大的恐慌,老刑警劉巖涣觉,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痴荐,死亡現(xiàn)場離奇詭異,居然都是意外死亡官册,警方通過查閱死者的電腦和手機(jī)生兆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膝宁,“玉大人皂贩,你說我怎么就攤上這事栖榨。” “怎么了明刷?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵婴栽,是天一觀的道長。 經(jīng)常有香客問我辈末,道長愚争,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任挤聘,我火速辦了婚禮轰枝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘组去。我一直安慰自己鞍陨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布从隆。 她就那樣靜靜地躺著诚撵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪键闺。 梳的紋絲不亂的頭發(fā)上寿烟,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機(jī)與錄音辛燥,去河邊找鬼筛武。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挎塌,可吹牛的內(nèi)容都是我干的徘六。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榴都,長吁一口氣:“原來是場噩夢啊……” “哼待锈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缭贡,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤炉擅,失蹤者是張志新(化名)和其女友劉穎辉懒,沒想到半個(gè)月后阳惹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡眶俩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年莹汤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颠印。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纲岭,死狀恐怖抹竹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情止潮,我是刑警寧澤窃判,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站喇闸,受9級特大地震影響袄琳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜燃乍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一唆樊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刻蟹,春花似錦逗旁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至介陶,卻和暖如春堤舒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哺呜。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工舌缤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人某残。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓国撵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玻墅。 傳聞我的和親對象是個(gè)殘疾皇子介牙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

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

  • 在現(xiàn)在的前端開發(fā)中,前后端分離澳厢、模塊化開發(fā)环础、版本控制、文件合并與壓縮剩拢、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,439評論 1 32
  • 前言 眾所周知目前比較火的工具就是gulp和webpack线得,但webpack和gulp卻有所不同,本人兩者的底層研...
    cduyzh閱讀 1,368評論 0 13
  • 我的新作觀點(diǎn)網(wǎng)http://www.guandn.com(觀點(diǎn)網(wǎng)是一個(gè)獵獲新奇、收獲知識、重在獨(dú)立思考的網(wǎng)站)角雷,它...
    pizCat閱讀 2,435評論 1 18
  • gulpjs是一個(gè)前端構(gòu)建工具祸穷,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù)勺三,API也非常簡單雷滚,學(xué)...
    井皮皮閱讀 1,296評論 0 10
  • #玩卡不卡·每日一抽#每一位都可以通過這張卡片覺察自己: 1、直覺他叫什么名字吗坚?葉子 2揭措、他幾歲了?58 3刻蚯、他現(xiàn)...
    我心安住閱讀 141評論 0 0