簡介:
gulp是前端開發過程中對代碼進行構建的工具,是自動化項目的構建利器;她不僅能對網站資源進行優化,而且在開發過程中很多重復的任務能夠使用正確的工具自動完成;使用她,我們不僅可以很愉快的編寫代碼,而且大大提高我們的工作效率。
gulp是基於Nodejs的自動任務運行器,她能自動化地完成 javascript/coffee/sass/less/html/image/css 等文件的的測試、檢查、合並、壓縮、格式化、瀏覽器自動刷新、部署文件生成,並監聽文件在改動后重復指定的這些步驟。在實現上,她借鑒了Unix操作系統的管道(pipe)思想,前一級的輸出,直接變成后一級的輸入,使得在操作上非常簡單。通過本文,我們將學習如何使用Gulp來改變開發流程,從而使開發更加快速高效。
gulp 和 grunt 非常類似,但相比於 grunt 的頻繁 IO 操作,gulp 的流操作,能更快地更便捷地完成構建工作。
本示例以gulp-less為例(將less編譯成css的gulp插件)展示gulp的常規用法,只要我們學會使用一個gulp插件后,其他插件就差看看其幫助文檔了。讓我們一起來學習gulp吧! ^_^
目錄:
01、安裝nodejs
02、使用命令行
03、npm介紹
04、選裝cnpm
05、全局安裝gulp
06、新建package.json文件
07、本地安裝gulp插件
08、新建gulpfile.js文件
09、運行gulp
10、總結
1、安裝nodejs
1.1、說明:gulp是基於nodejs,理所當然需要安裝nodejs;
1.2、安裝:打開nodejs官網,點擊碩大的綠色Download按鈕,它會根據系統信息選擇對應版本(.msi文件)。然后像安裝QQ一樣安裝它就可以了(安裝路徑隨意)。
2、使用命令行
node -v查看安裝的nodejs版本,出現版本號,說明剛剛已正確安裝nodejs。PS:未能出現版本號,請嘗試注銷電腦重試;
npm -v查看npm的版本號
3、npm介紹
3.1、說明:npm(node package manager)nodejs的包管理器,用於node插件管理(包括安裝、卸載、管理依賴等);
3.2、使用npm安裝插件:命令提示符執行npm install <name> [-g] [--save-dev];
3.2.1、<name>:node插件名稱。例:npm install gulp-less --save-dev
3.2.2、-g:全局安裝。將會安裝在C:\Users\Administrator\AppData\Roaming\npm,並且寫入系統環境變量; 非全局安裝:將會安裝在當前定位目錄; 全局安裝可以通過命令行在任何地方調用它,本地安裝將安裝在定位目錄的node_modules文件夾下,通過require()調用;
3.2.3、--save:將保存配置信息至package.json(package.json是nodejs項目配置文件);
3.2.4、-dev:保存至package.json的devDependencies節點,不指定-dev將保存至dependencies節點;
3.2.5、為什么要保存至package.json?因為node插件包相對來說非常龐大,所以不加入版本管理,將配置信息寫入package.json並將其加入版本管理,其他開發者對應下載即可(命令提示符執行npm install,則會根據package.json下載所有需要的包)。
3.3、使用npm卸載插件:npm uninstall <name> [-g] [--save-dev] PS:不要直接刪除本地插件包
3.4、使用npm更新插件:npm update <name> [-g] [--save-dev]
3.4.1、更新全部插件:npm update [--save-dev]
3.5、查看npm幫助:npm help
3.6、當前目錄已安裝插件:npm list
4、選裝cnpm
4.1、說明:因為npm安裝插件是從國外服務器下載,受網絡影響大,可能出現異常,如果npm的服務器在中國就好了,所以我們樂於分享的淘寶團隊干了這事。32個!來自官網:“這是一個完整 npmjs.org 鏡像,你可以用此代替官方版本(只讀),同步頻率目前為 10分鍾 一次以保證盡量與官方服務同步。”;
4.2、官方網址:http://npm.taobao.org;
4.3、安裝:命令提示符執行npm install cnpm -g --registry=https://registry.npm.taobao.org; 注意:安裝完后最好查看其版本號cnpm -v或關閉命令提示符重新打開,安裝完直接使用有可能會出現錯誤;
注:cnpm跟npm用法完全一致,只是在執行命令時將npm改為cnpm(以下操作將以cnpm代替npm)。
5、全局安裝gulp
5.1、說明:全局安裝gulp目的是為了通過她執行gulp任務;
5.2、安裝:命令提示符執行cnpm install gulp -g;
5.3、查看是否正確安裝:命令提示符執行gulp -v,出現版本號即為正確安裝。
6、新建package.json文件
6.1、說明:package.json是基於nodejs項目必不可少的配置文件,它是存放在項目根目錄的普通json文件;
6.2、它是這樣一個json文件(注意:json文件內是不能寫注釋的,復制下列內容請刪除注釋):
{ "name": "lesstest", "version": "1.0.0", "description": "just for test", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "http://git.oschina.net/irandom/gulp" }, "keywords": [ "gulp" ], "author": "tony.zeng", "license": "ISC", "devDependencies": { "gulp": "^3.9.1", "gulp-less": "^3.1.0" } }
6.3、當然我們可以手動新建這個配置文件,但是作為一名有志青年,我們應該使用更為效率的方法:命令提示符執行cnpm init
6.4、查看package.json幫助文檔,命令提示符執行cnpm help package.json 特別注意:package.json是一個普通json文件,所以不能添加任何注釋。
7、本地安裝gulp插件
7.1、安裝:定位目錄命令后提示符執行cnpm install --save-dev
7.2、本示例以gulp-less為例(編譯less文件),命令提示符執行cnpm install gulp-less --save-dev
7.3、將會安裝在node_modules的gulp-less目錄下,該目錄下有一個gulp-less的使用幫助文檔README.md;
7.4、為了能正常使用,我們還得本地安裝gulp:cnpm install gulp --save-dev;
PS:細心的你可能會發現,我們全局安裝了gulp,項目也安裝了gulp,全局安裝gulp是為了執行gulp任務,本地安裝gulp則是為了調用gulp插件的功能。
8、新建gulpfile.js文件(重要)
8.1、說明:gulpfile.js是gulp項目的配置文件,是位於項目根目錄的普通js文件(其實將gulpfile.js放入其他文件夾下亦可)。
8.2、它大概是這樣一個js文件
//導入工具包 require('node_modules里對應模塊') var gulp = require('gulp'), //本地安裝gulp所用到的地方 less = require('gulp-less'); //定義一個testLess任務(自定義任務名稱) gulp.task('testLess', function () { gulp.src('src/less/index.less') //該任務針對的文件 .pipe(less()) //該任務調用的模塊 .pipe(gulp.dest('src/css')); //將會在src/css下生成index.css }); gulp.task('default',['testLess', 'elseTask']); //定義默認任務 //gulp.task(name[, deps], fn) 定義任務 name:任務名稱 deps:依賴任務名稱 fn:回調函數 //gulp.src(globs[, options]) 執行任務處理的文件 globs:處理的文件路徑(字符串或者字符串數組) //gulp.dest(path[, options]) 處理完后文件生成路徑
9、運行gulp
9.1、說明:命令提示符執行gulp 任務名稱;
9.2、編譯less:命令提示符執行gulp testLess;
9.3、當執行gulp default或gulp將會調用default任務里的所有任務[‘testLess’,’elseTask’]。
10、總結
安裝nodejs => 新建package.json文件 => 全局和本地安裝gulp => 安裝gulp插件 => 新建gulpfile.js文件 => 通過命令提示符運行gulp任務。
附一份gulpfile.js文件:
1 // 引入組件 2 var gulp = require('gulp'), // 引入Gulp 3 minifycss = require('gulp-minify-css'), // css壓縮 4 uglify = require('gulp-uglify'), // js壓縮 5 concat = require('gulp-concat'), // 文件合並 6 rename = require('gulp-rename'), // 文件更名 7 less = require('gulp-less'), // less2css 8 notify = require('gulp-notify'); // 提示信息 9 10 // less to css 11 gulp.task('less2css', function () { 12 return gulp.src('./src/less/*.less') 13 .pipe(less()) 14 .pipe(gulp.dest('./src/css')) 15 .pipe(notify({ message: 'less2css task ok' })); 16 }); 17 18 // 合並、壓縮、重命名css 19 gulp.task('css', function() { 20 return gulp.src('src/css/*.css') 21 .pipe(concat('main.css')) 22 .pipe(gulp.dest('./dest/css')) 23 .pipe(rename({ suffix: '.min' })) 24 .pipe(minifycss()) 25 .pipe(gulp.dest('./dest/css')) 26 .pipe(notify({ message: 'css task ok' })); 27 }); 28 29 // 合並、壓縮js文件 30 gulp.task('js', function() { 31 32 return gulp.src('src/js/*.js') 33 .pipe(concat('main.js')) 34 .pipe(gulp.dest('dest/js')) 35 .pipe(rename({ suffix: '.min' })) 36 .pipe(uglify()) 37 .pipe(gulp.dest('dest/js')) 38 .pipe(notify({ message: 'js task ok' })); 39 }); 40 41 // 默認任務 42 gulp.task('default', function(){ 43 44 gulp.run('less2css', 'css', 'js'); 45 46 // // Watch .css files 47 // gulp.watch('src/css/*.css', ['css']); 48 // 49 // // Watch .js files 50 // gulp.watch('src/js/*.js', ['js']); 51 52 }); 53 54 //定義一個testLess任務(自定義任務名稱) 55 //gulp.task('testLess', function () { 56 // gulp.src('src/less/index.less') //該任務針對的文件 57 // .pipe(less()) //該任務調用的模塊 58 // .pipe(gulp.dest('src/css')); //將會在src/css下生成index.css 59 //}); 60 // 61 //gulp.task('default',['testLess']); //定義默認任務