摘要:話不多說,今天的主題是使用打造傳統(tǒng)項(xiàng)目的前端工作流。是一個(gè)廣泛使用的轉(zhuǎn)碼器,可以將代碼轉(zhuǎn)為代碼,從而在現(xiàn)有環(huán)境執(zhí)行。這意味著,你可以用的方式編寫程序,又不用擔(dān)心現(xiàn)有環(huán)境是否支持。
概述
最近前端一直是一個(gè)火熱的話題,前端技術(shù)棧也是伴隨著nodejs的出現(xiàn)而更替的飛快,導(dǎo)致大部分前端開發(fā)者曾一度迷茫在這各種技術(shù)選型上,比如前端自動(dòng)化工具就有Grunt,Gulp,Webpack,F(xiàn)is3等等各種解決方案,關(guān)于它們的優(yōu)劣也有很多大牛的深度剖析和見解,相信很多人和筆者一樣,很想緊跟上潮流的步伐卻因亂花漸欲迷人眼而止步當(dāng)前。
無奈筆者倔強(qiáng),在多次拿起放下的糾結(jié)之后,終究是尋得一些靈感和啟發(fā),得以駕馭其一二。
話不多說,今天的主題是:使用Gulp打造傳統(tǒng)項(xiàng)目的前端工作流。
可能很多開發(fā)者像我一樣依然還服務(wù)于傳統(tǒng)的MVC架構(gòu)的項(xiàng)目,這些項(xiàng)目的特點(diǎn)是html頁面由后臺(tái)渲染,前端工程師和后端工程師在一個(gè)工程中和(si)諧(bi)的生活著,前端開發(fā)簡單而又輕松,拼拼頁面,寫寫特效,可能還會(huì)用用后端語法渲染下數(shù)據(jù)。那么問題來了,我想用sass或者less怎么辦?我想寫ES6怎么辦?js文件太大需要壓縮怎么辦?現(xiàn)在,這些問題將統(tǒng)統(tǒng)可以解決。
Gulpgulp是nodejs的一個(gè)擴(kuò)展庫,是一個(gè)自動(dòng)化的構(gòu)建工具,它的優(yōu)勢是擁有豐富的插件,利用插件我們可以實(shí)現(xiàn)像sass編譯,ES6轉(zhuǎn)換為ES5等各種前端工作。API不多,只有簡單的幾個(gè)函數(shù),官方有簡潔友好的中文跟文檔。
gulp快速入門
gulpAPI文檔
編譯Sasssass是一個(gè)css的預(yù)處理器,它由很多很棒的特性比如支持變量,支持文件引入,支持樣式嵌套繼承等等,可以大大提升我們的css書寫效率。
sass依賴ruby環(huán)境,多帶帶安裝sass的話就存在著一個(gè)麻煩的環(huán)境部署問題,好在gulp擁有gulp-sass插件可以幫我們進(jìn)行轉(zhuǎn)換而省去了安裝ruby的繁瑣工作,下邊是筆者的sass編譯任務(wù)
//gulp插件 var gulp = require("gulp"), sass = require("gulp-sass"); ... //sass編譯 gulp.task("sass", function(){ return gulp.src("/**/*.scss") .pipe( sass() ) //編譯sass .pipe( gulp.dest("/build/css") ) //編譯后文件存放目錄 });
是不是很簡單呢,當(dāng)然我們還可以順便做個(gè)css壓縮,自動(dòng)添加瀏覽器前綴的功能,開發(fā)的時(shí)候還需要實(shí)時(shí)編譯,所以我們再增加一個(gè)監(jiān)聽插件gulp-watch,完整的css處理任務(wù)如下:
安裝所有g(shù)ulp的插件
npm install --save-dev gulp gulp-sass gulp-autoprefixer gulp-cssnano gulp-rename gulp-watch
編寫gulpfile.js文件
//gulp插件 var gulp = require("gulp"), sass = require("gulp-sass"), autoprefixer = require("gulp-autoprefixer"), cssnano = require("gulp-cssnano"), //css壓縮 rename = require("gulp-rename"), watch = require("gulp-watch"); ... gulp.task("sass", function(){ return gulp.src(sasspath) .pipe( watch(sasspath)) //監(jiān)聽gulp.watch不能監(jiān)聽新增文件 .pipe( sass() ) //編譯sass .pipe( autoprefixer()) //添加瀏覽器前綴 .pipe( gulp.dest(disCssPath) ) .pipe( cssnano() ) .pipe( rename({suffix: ".min"})) //rename壓縮后的文件名 .pipe( gulp.dest(disCssPath) ); });
命令行中執(zhí)行g(shù)ulp命令
gulp sass
任務(wù)完成后在目標(biāo)目錄可以看到編譯后生成的壓縮和未壓縮的樣式文件
├── css │ ├── index.css │ ├── index.min.css │ ├── test.css │ └── test.min.css
實(shí)時(shí)編譯示例:
ES6指ECMAScript 6,也叫ECMAScript 2015,是JavaScript語言的新一代標(biāo)準(zhǔn),已經(jīng)在2015年6月正式發(fā)布了。它的目標(biāo),是使得JavaScript語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級開發(fā)語言。他提出了很多現(xiàn)代編程語言的很多新特性,包括變量,數(shù)組,函數(shù),對象等等都做了擴(kuò)展,筆者也還在學(xué)習(xí)當(dāng)中,推薦一份阮一峰大大寫的ES6的電子書。
ECMAScript 6入門
當(dāng)然目前的瀏覽器對ES6支持度還不是很完美,所以不能直接交給瀏覽器解析使用。那么新問題來了,我們需要進(jìn)行轉(zhuǎn)碼。
babel是一個(gè)廣泛使用的ES6轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼,從而在現(xiàn)有環(huán)境執(zhí)行。這意味著,你可以用ES6的方式編寫程序,又不用擔(dān)心現(xiàn)有環(huán)境是否支持。
上邊電子書中詳細(xì)的講述了如何安裝和使用babel進(jìn)行轉(zhuǎn)碼,但是今天我們依然不講它,gulp有對應(yīng)的插件可以解決,那就是gulp-babel,同樣的,我們還可以順便利用gulp-uglify對編譯后的js文件進(jìn)行壓縮,事情可以依然優(yōu)雅的解決:
安裝babel和對應(yīng)的轉(zhuǎn)碼規(guī)則擴(kuò)展組件
npm install --save-dev gulp-babel babel-preset-es2015 babel-preset-stage-3
修改gulpfile.js
... var babel = require("gulp-babel"), uglify = require("gulp-uglify"); ... //編譯js gulp.task("js",function(){ return gulp.src(jspath) .pipe( watch(jspath)) .pipe(babel({ presets: ["es2015","stage-3"] })) //babel轉(zhuǎn)碼 .pipe( gulp.dest(disJsPath) ) .pipe(uglify()) //壓縮 .pipe( rename({suffix: ".min"})) .pipe( gulp.dest(disJsPath) ); });
同樣的,執(zhí)行對應(yīng)的gulp命令
gulp js
任務(wù)完成后會(huì)在目標(biāo)目錄增加編譯后的js文件
└── js ├── index.js └── index.min.js
實(shí)時(shí)編譯示例:
以上演示代碼只是部分,不是完整的,僅供參考,如果想快速在自己項(xiàng)目中使用可以下載本文對應(yīng)的源碼,歡迎點(diǎn)star,筆者會(huì)繼續(xù)增加圖片壓縮,雪碧圖處理等新功能,謝謝關(guān)注!
gulp-work-flow 前端工作流原來可以這么簡單
中秋之際,在此祝大家節(jié)日快樂!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/87907.html
摘要:在這種背景下,誕生了很多工具很多前端工作流程。目前我們很多時(shí)候常說的前端工程師,其實(shí)主要指的就是其工程師。所以就是來解決這些問題的最后至此前端的一個(gè)工作結(jié)構(gòu)介紹至此結(jié)束。 這個(gè)時(shí)代不懂點(diǎn)前端知識,真的沒有辦法生存。就算不會(huì)寫,也得了解它的原理吧! 最近做了一些總結(jié),之前都是迷迷糊糊,搞不清楚前端之前的相關(guān)定位。好好梳理了一下。錯(cuò)誤之處請各位指正。 本文主要說的是 JavaScript ...
摘要:開工,我是如何定義現(xiàn)代切圖的既然所有后臺(tái)都有計(jì)劃重做,那么統(tǒng)一風(fēng)格那就是必須的了。我們前端部門采用的是自己搭建的。讓我使用,我是不樂意的。我采用提供一個(gè)服務(wù),提供靜態(tài)頁面預(yù)覽。沒錯(cuò)我就是這么直接。 歡迎一起交流 歡迎關(guān)注我的個(gè)人公眾號,不定期更新自己的工作心得。 showImg(https://segmentfault.com/img/bVEk23?w=258&h=258); 什么是靜...
摘要:開工,我是如何定義現(xiàn)代切圖的既然所有后臺(tái)都有計(jì)劃重做,那么統(tǒng)一風(fēng)格那就是必須的了。我們前端部門采用的是自己搭建的。讓我使用,我是不樂意的。我采用提供一個(gè)服務(wù),提供靜態(tài)頁面預(yù)覽。沒錯(cuò)我就是這么直接。 歡迎一起交流 歡迎關(guān)注我的個(gè)人公眾號,不定期更新自己的工作心得。 showImg(https://segmentfault.com/img/bVEk23?w=258&h=258); 什么是靜...
摘要:簡單介紹一下自己和目前的工作我現(xiàn)在是一名前端,在蘇州一家小公司上班。和前端大牛相比,我是一個(gè)不能再普通的了。詳細(xì)寫寫你是如何走上編程的道路我是一個(gè)有聽力殘疾的人,幾乎聽不到這個(gè)世界的聲音。因?yàn)樯?,我選擇了一條編程的路。 簡單介紹一下自己和目前的工作 我現(xiàn)在是一名web前端,在蘇州一家小公司上班。和前端大牛相比,我是一個(gè)不能再普通的了。沒有英語基礎(chǔ),2014年就知道前端,但斷斷續(xù)續(xù)學(xué)到...
閱讀 3110·2023-04-26 01:58
閱讀 956·2021-11-24 09:38
閱讀 3289·2021-09-03 10:29
閱讀 718·2021-08-21 14:10
閱讀 1492·2019-08-30 15:44
閱讀 3091·2019-08-30 14:10
閱讀 3216·2019-08-29 16:32
閱讀 1482·2019-08-29 12:48