Javascript 高級(jí) 自動(dòng)化

什么是GULP?

? ? ? ? ? ? GULP 是前端開發(fā)過程中對(duì)代碼進(jìn)行構(gòu)建的工具褂删,是自動(dòng)化項(xiàng)目的構(gòu)建利器竹挡;她不僅能

對(duì)網(wǎng)站資源進(jìn)行優(yōu)化做入,而且在開發(fā)過程中很多重復(fù)的任務(wù)能夠使用正確的工具自動(dòng)完成赎线;使

用她痛侍,我們不僅可以很愉快的編寫代碼曹步,而且大大提高我們的工作效率

安裝GULP

Gulp 是基于 node.js 環(huán)境運(yùn)行的宪彩,所以我們首先需要安裝 node.js 環(huán)境

Node.js的安裝

1. 下載 nodejs 安裝包

2到 nodejs 官網(wǎng)下載軟件 https://nodejs.org

安裝 Nodejs

在 Window 系統(tǒng)中直接下一步下一步式安裝。安裝好后 WIN+R 輸入 cmd 調(diào)出 DOS 窗

口讲婚,輸入 node -v 看看是否有版本信息尿孔,如果沒有則查看系統(tǒng)變量 Path,把 path 配置上

如果在 cmd 中能夠輸出上圖的信息筹麸,說明 node.js 的環(huán)境已經(jīng)安裝成功了活合,下面就可以

開始 gulp 的安裝了

3. 推薦安裝 cnpm

安裝 cnpm

執(zhí)行 npm install cnpm -g --registry=https://registry.npm.taobao.org

3.2 檢測(cè) cnpm 是否安裝成功

執(zhí)行 cnpm -v 顯示版本號(hào)即安裝成功

gulp? 的安裝

全局安裝? gulp

打開 Node.js command prompt 或者 cmd 命令提示符

輸入命令:npm install –g gulp

然后輸入 gulp -v,看看是否有版本信息

項(xiàng)目文件根目錄新建 package.json

注:package.json 是基于 nodejs 項(xiàng)目必不可少的配置文件物赶,它是存放在項(xiàng)目根目錄的普通 json

文件重點(diǎn)內(nèi)容

?? 進(jìn)入你的項(xiàng)目文件

示例:進(jìn)入 D:/WWW/test 項(xiàng)目文件夾中

gulp 安裝教程白指,使用教程,簡(jiǎn)單的自動(dòng)化任務(wù)教程

執(zhí)行命令 cnpm init 來新建 package.json

gulp 安裝教程酵紫,使用教程侵续,簡(jiǎn)單的自動(dòng)化任務(wù)教程

檢測(cè) package.json 是否成功新建

查看項(xiàng)目文件根目錄,是否新建 package.json憨闰,且內(nèi)容是否和你終端中輸入的一致。

注:可不使用 cnpm init 方式需五,可選擇手動(dòng)創(chuàng)建 package.json 配置文件

本地安裝

建立項(xiàng)目鹉动,創(chuàng)建 gulpfile.js 和 package.json 文件。運(yùn)行命令

cnpm install gulp --save-dev

安裝本地 gulp宏邮。


安裝相關(guān)插件

Gulp 提供了大量的常用插件泽示,供我們使用,下面列舉一些大家可能經(jīng)常要使用的插件:

?? sass 的編譯(gulp-sass)

?? less 編譯 (gulp-less)

?? 重命名(gulp-rename)

?? 自動(dòng)添加 css 前綴(gulp-autoprefixer)

?? 壓縮 css(gulp-clean-css)

?? js 代碼校驗(yàn)(gulp-jshint)

?? 合并 js 文件(gulp-concat)

?? 壓縮 js 代碼(gulp-uglify)

?? 壓縮圖片(gulp-imagemin)

?? 自動(dòng)刷新頁(yè)面(gulp-livereload蜜氨,谷歌瀏覽器親測(cè)械筛,谷歌瀏覽器需安裝 livereload 插件)

?? 圖片緩存,只有圖片替換了才壓縮(gulp-cache)

?? 更改提醒(gulp-notify)


less 和 和 sass? 的編譯(gulp-less 飒炎,gulp-sass )

less 使用 gulp-less,安裝:cnpm install –save-dev gulp-less

在 Gulpfile.js 執(zhí)行如下代碼:

var gulp = require('gulp'),

less = require("gulp-less");

gulp.task('test-less', function () {

gulp.src('src/less/*.less')

.pipe(less())

.pipe(gulp.dest('dist/css'));

});

Sass? 插件:

sass 使用 gulp-sass,安裝:npm install –save-dev gulp-sass

在 Gulpfile.js 執(zhí)行如下代碼:

var gulp = require('gulp'),

sass = require("gulp-sass");

gulp.task('test-sass', function () {

gulp.src('sass/*.sass')

.pipe(sass())

.pipe(gulp.dest('dist/css'));

});


壓縮 HTML? 頁(yè)面 (gulp-htmlmin )

Gulp-htmlmin 插件的安裝:

cnpm install gulp-htmlmin --save-dev

安裝成功后埋哟,我們?cè)?gulpfile.js 中編寫代碼,完成頁(yè)面的壓縮:

var gulp = require("gulp");//gulp模塊var gulp_htmlmin = require('gulp-htmlmin');//gulp-htmlmin插件模塊//test-htmlmin任務(wù)gulp.task("test-htmlmin",function(){var options = {removeComments: true,//清除HTML注釋collapseWhitespace: true,//壓縮HTMLcollapseBooleanAttributes: true,//省略布爾屬性的值==>removeEmptyAttributes: true,//刪除所有空格作屬性值==>removeScriptTypeAttributes: true,//刪除的type="text/javascript"removeStyleLinkTypeAttributes: true,//刪除和的type="text/css"minifyJS: true,//壓縮頁(yè)面JSminifyCSS: true//壓縮頁(yè)面CSS};gulp.src("src/*.html").pipe(gulp_htmlmin(options)).pipe(gulp.dest("dest/"))});

執(zhí)行命令:

gulp test-htmlmin


使用 gulp-autoprefixer 根據(jù)設(shè)置瀏覽器版本自動(dòng)處理瀏覽器前綴郎汪。使用她我們可以很瀟

灑地寫代碼赤赊,不必考慮各瀏覽器兼容前綴∩酚【特別是開發(fā)移動(dòng)端頁(yè)面時(shí)抛计,就能充分體現(xiàn)它的

優(yōu)勢(shì)。例如兼容性不太好的 flex 布局照筑〈到兀】

本地安裝 gulp-autoprefixer

cnpm install gulp-autoprefixer --save-dev

之后在 gulpfile.js 中書寫任務(wù):

var gulp = require("gulp");//gulp模塊

var gulp_less = require("gulp-less");//gulp-less插件模塊

var gulp_sass = require("gulp-sass");//gulp-sass插件模塊

var gulp_htmlmin = require('gulp-htmlmin');//gulp-htmlmin插件模塊

var autoprefixer = require('gulp-autoprefixer');//autoprefixer插件模塊

//test-autoprefixer任務(wù)

gulp.task("test-autoprefixer",function(){

gulp.src("src/css/*.css")

.pipe(autoprefixer({

browsers: ['last 2 versions', 'Android >= 4.0'],

cascade: true, //是否美化屬性值 默認(rèn):true 像這樣:

//-webkit-transform: rotate(45deg);

// transform: rotate(45deg);

remove:true //是否去掉不必要的前綴 默認(rèn):true

}))

.pipe(gulp.dest("dest/css/"))

});

在 cmd 中執(zhí)行命令:

gulp test-autoprefixer

使用 gulp-minify-css 壓縮 css 文件瘦陈,減小文件大小,并給引用 url 添加版本號(hào)避免緩存波俄。

重要:gulp-minify-css 已經(jīng)被廢棄晨逝,請(qǐng)使用 gulp-clean-css,用法一致弟断。

本地安裝 gulp-minify-css

github:https://github.com/jonathanepollack/gulp-minify-css

命令提示符執(zhí)行 cnpm install gulp-minify-css --save-dev

//引入所需的模塊

var gulp = require("gulp");//gulp模塊

var gulp_less = require("gulp-less");//gulp-less插件模塊

var gulp_sass = require("gulp-sass");//gulp-sass插件模塊

var gulp_htmlmin = require('gulp-htmlmin');//gulp-htmlmin插件模塊

var autoprefixer = require('gulp-autoprefixer');//autoprefixer插件模塊

var cssmin_minify = require('gulp-minify-css');

var cssmin_clean = require('gulp-clean-css');

//確保已本地安裝gulp-make-css-url-version [cnpm install gulp-make-css-url-version --save-dev]

var cssver = require('gulp-make-css-url-version');

//test-minify任務(wù)

gulp.task("test-minify",function(){

gulp.src("src/css/*.css")

.pipe(cssmin_minify({

advanced: false,//類型:Boolean 默認(rèn):true [是否開啟高級(jí)優(yōu)化(合并選擇器等)]

compatibility: 'ie7',//保留ie7及以下兼容寫法 類型:String 默認(rèn):''or'*' [啟用兼容模式咏花;

'ie7':IE7兼容模式,'ie8':IE8兼容模式阀趴,'*':IE9+兼容模式]

keepBreaks: true,//類型:Boolean 默認(rèn):false [是否保留換行]

keepSpecialComments: '*'

//保留所有特殊前綴 當(dāng)你用autoprefixer生成的瀏覽器前綴昏翰,如果不加這個(gè)參數(shù),有可能將會(huì)刪除你的部

分前綴

}))

.pipe(gulp.dest("dest/css/"))

});

給 css 文件里引用 url 加版本號(hào)(根據(jù)引用文件的 md5 生產(chǎn)版本號(hào))刘急,像這樣:

//確保已本地安裝gulp-make-css-url-version [cnpm install gulp-make-css-url-version --save-dev]

var cssver = require('gulp-make-css-url-version');

//cssmin_clean任務(wù)

gulp.task('test-cssmin', function () {

gulp.src('src/css/*.css')

.pipe(cssver()) //給css文件里引用文件加版本號(hào)(文件MD5)防止緩存

.pipe(cssmin_clean())

.pipe(gulp.dest('dest/css'));

});


使用 gulp-uglify 壓縮 javascript 文件棚菊,減小文件大小。

本地安裝 gulp-uglify

github:https://github.com/terinjokes/gulp-uglify

命令提示符執(zhí)行 cnpm install gulp-uglify --save-dev

gulpfile.js 文件:

gulp.task('jsmin', function () {

gulp.src('src/js/index.js')

.pipe(uglify())

.pipe(gulp.dest('dist/js'));

});

如果有多個(gè)文件壓縮:

//多個(gè)文件

gulp.task('jsmin', function () {

gulp.src(['src/js/index1.js','src/js/login.js','src/js/js1.js','src/js/omg.js'])

//多個(gè)文件以數(shù)組形式傳入

.pipe(uglify())

.pipe(gulp.dest('dest/js'));

});

也可以使用匹配方式:

//排除排除混淆關(guān)鍵字叔汁,多個(gè)參數(shù)

gulp.task('jsmin', function () {

//壓縮src/js目錄下的所有js文件

//除了test1.js和test2.js(**匹配src/js的0個(gè)或多個(gè)子文件夾)

gulp.src(['src/js/*.js', '!src/js/**/*.js'])

.pipe(uglify({

// mangle: true,//類型:Boolean 默認(rèn):true 是否修改變量名

mangle: {except: ['require' ,'exports' ,'module' ,'$']},//排除混淆關(guān)鍵字

compress: true,//類型:Boolean 默認(rèn):true 是否完全壓縮

preserveComments: 'all' //保留所有注釋

}))

.pipe(gulp.dest('dest/js'));

})


使用 gulp-concat 合并 javascript 文件统求,減少網(wǎng)絡(luò)請(qǐng)求。

本地安裝 gulp-concat

github:https://github.com/wearefractal/gulp-concat

命令提示符執(zhí)行 cnpm install gulp-concat --save-dev

gulpfile.js 文件:

var concat = require('gulp-concat');

//合并js文件

gulp.task('test_concat', function () {

gulp.src('src/js/*.js')

.pipe(concat('all.js'))//合并后的文件名

.pipe(gulp.dest('test/js'));

});

使用 gulp-imagemin 壓縮圖片文件(包括 PNG、JPEG、GIF 和 SVG 圖片)已慢。注意:安裝時(shí)

很容易出錯(cuò)的何之。

本地安裝 gulp-imagemin

github:https://github.com/sindresorhus/gulp-imagemin

命令提示符執(zhí)行 cnpm install gulp-imagemin --save-dev

gulpfile.js 文件:

基本壓縮:

var concat = require('gulp-concat');

//合并js文件

gulp.task('test_concat', function () {

gulp.src('src/js/*.js')

.pipe(concat('all.js'))//合并后的文件名

.pipe(gulp.dest('test/js'));

});

gulp-imagemin 其他參數(shù):

gulp.task('testImagemin', function () {

gulp.src('src/img.{png,jpg,gif,ico}')

.pipe(imagemin({

optimizationLevel: 5, //類型:Number 默認(rèn):3 取值范圍:0-7(優(yōu)化等級(jí))

progressive: true, //類型:Boolean 默認(rèn):false 無損壓縮jpg圖片

interlaced: true, //類型:Boolean 默認(rèn):false 隔行掃描gif進(jìn)行渲染

multipass: true //類型:Boolean 默認(rèn):false 多次優(yōu)化svg直到完全優(yōu)化

}))

.pipe(gulp.dest('dest/img'));

});

深度壓縮圖片

var imagemin = require('gulp-imagemin');

//確保本地已安裝imagemin-pngquant [cnpm install imagemin-pngquant --save-dev]

var pngquant = require('imagemin-pngquant');

//深度壓縮圖片

gulp.task('testImagemin', function () {

gulp.src('src/img/*.{png,jpg,gif,ico}')

.pipe(imagemin({

progressive: true,

svgoPlugins: [{removeViewBox: false}],//不要移除svg的viewbox屬性

use: [pngquant()] //使用pngquant深度壓縮png圖片的imagemin插件

}))

.pipe(gulp.dest('dest/img'));

});

只壓縮修改的圖片。壓縮圖片時(shí)比較耗時(shí),在很多情況下我們只修改了某些圖片,沒有

必要壓縮所有圖片,使用”gulp-cache”只壓縮修改的圖片己莺,沒有修改的圖片直接從緩存文

件讀取(C:\Users\Administrator\AppData\Local\Temp\gulp-cache):

//確保本地已安裝imagemin-pngquant [cnpm install imagemin-pngquant --save-dev]

var pngquant = require('imagemin-pngquant');

//確保本地已安裝gulp-cache [cnpm install gulp-cache --save-dev]

var cache = require('gulp-cache');

gulp.task('testImagemin', function () {

gulp.src('src/img/*.{png,jpg,gif,ico}')

.pipe(cache(imagemin({

progressive: true,

svgoPlugins: [{removeViewBox: false}],

use: [pngquant()]

})))

.pipe(gulp.dest('dest/img'));

});


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末戈轿,一起剝皮案震驚了整個(gè)濱河市凌受,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌思杯,老刑警劉巖胜蛉,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異色乾,居然都是意外死亡腾么,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門杈湾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來解虱,“玉大人,你說我怎么就攤上這事漆撞∨固” “怎么了于宙?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)悍汛。 經(jīng)常有香客問我捞魁,道長(zhǎng),這世上最難降的妖魔是什么离咐? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任谱俭,我火速辦了婚禮,結(jié)果婚禮上宵蛀,老公的妹妹穿的比我還像新娘昆著。我一直安慰自己,他們只是感情好术陶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布凑懂。 她就那樣靜靜地躺著,像睡著了一般梧宫。 火紅的嫁衣襯著肌膚如雪接谨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天塘匣,我揣著相機(jī)與錄音脓豪,去河邊找鬼。 笑死忌卤,一個(gè)胖子當(dāng)著我的面吹牛扫夜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埠巨,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼现拒!你這毒婦竟也來了辣垒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤印蔬,失蹤者是張志新(化名)和其女友劉穎勋桶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侥猬,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡例驹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了退唠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹃锈。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瞧预,靈堂內(nèi)的尸體忽然破棺而出屎债,到底是詐尸還是另有隱情仅政,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布盆驹,位于F島的核電站圆丹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏躯喇。R本人自食惡果不足惜辫封,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廉丽。 院中可真熱鬧倦微,春花似錦、人聲如沸雅倒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蔑匣。三九已至劣欢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裁良,已是汗流浹背凿将。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留价脾,地道東北人牧抵。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像侨把,于是被迫代替她去往敵國(guó)和親犀变。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 隨著發(fā)展秋柄,前端代碼復(fù)雜度和規(guī)模增加获枝,使用構(gòu)建工具實(shí)現(xiàn)自動(dòng)化的前端開發(fā)流程很有必要。前端自動(dòng)化構(gòu)建工具具有代碼壓縮骇笔,...
    Dasen閱讀 302評(píng)論 0 0
  • Gulp 是前端開發(fā)過程中對(duì)代碼進(jìn)行構(gòu)建的工具省店,是自動(dòng)化項(xiàng)目的構(gòu)建利器 它不僅能對(duì)網(wǎng)站資源進(jìn)行優(yōu)化,而且在開發(fā)過程...
    碧玉含香閱讀 286評(píng)論 0 0
  • gulpjs是一個(gè)前端構(gòu)建工具笨触,與gruntjs相比懦傍,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡(jiǎn)單芦劣,學(xué)...
    井皮皮閱讀 1,295評(píng)論 0 10
  • 安裝Gulp首先需要安裝Node.js粗俱,并在控制臺(tái)輸入$ npm install gulp -gMac端需要寫成$...
    LaBaby_閱讀 915評(píng)論 0 1
  • gulpjs是一個(gè)前端構(gòu)建工具,與gruntjs相比虚吟,gulpjs無需寫一大堆繁雜的配置參數(shù)源梭,API也非常簡(jiǎn)單娱俺,學(xué)...
    依依玖玥閱讀 3,152評(píng)論 7 55