參考自:http://segmentfault.com/a/1190000000372547css
資源:html
本文假設你以前沒有用過任何任務腳本(task runner)和命令行工具,一步步教你上手Gulp。不要怕,它其實很簡單,我會分爲五步向你介紹gulp並幫助你完成一些驚人的事情。那就直接開始吧。node
首先,最基本也最重要的是,咱們須要搭建node環境。訪問http://nodejs.org,而後點擊大大的綠色的install
按鈕,下載完成後直接運行程序,就一切準備就緒。npm會隨着安裝包一塊兒安裝,稍後會用到它。nginx
安裝好後記得配置環境變量 NODE_PATH="C:\Users\Gaming\node_modules" (引號裏的爲本身node的安裝路徑), 配置方法 以下:git
也許如今你還不是很瞭解什麼是命令行——OSX中的終端(Terminal),windows中的命令提示符(Command Prompt),但很快你就會知道。它看起來沒那麼簡單,但一旦掌握了它的竅門,就能夠很方便的執行不少命令行程序,好比Sass,Yeoman和Git等,這些都是很是有用的工具。github
若是你很熟悉命令行,直接跳到步驟四。npm
爲了確保Node已經正確安裝,咱們執行幾個簡單的命令。json
node -v
回車(Enter),若是正確安裝的話,你會看到所安裝的Node的版本號,接下來看看npm。gulp
npm -v
這一樣能獲得npm的版本號。segmentfault
若是這兩行命令沒有獲得返回,可能node就沒有安裝正確,嘗試重啓下命令行工具,若是還不行的話,只能回到第一步進行重裝。
如今,咱們已經大體瞭解了命令行而且知道如何簡單使用它,接下來只須要兩個簡單的命令就能定位到文件目錄並看看目錄裏都有些什麼文件。
建議多敲敲這兩個命令,瞭解文件系統並知道文件都在哪裏。
習慣使用了這兩個命令後,就要進入咱們的項目目錄,這個目錄各不相同,舉個例子,這是我進入我項目目錄的命令:
cd /Applications/XAMPP/xamppfiles/htdocs/my-project
成功進入項目目錄後,咱們開始安裝gulp。
咱們已經知道如何使用命令行,如今嘗試點新的東西,認識npm而後安裝gulp。
NPM是基於命令行的node包管理工具,它能夠將node的程序模塊安裝到項目中,在它的官網中能夠查看和搜索全部可用的程序模塊。
在命令行中輸入
npm install -g gulp
-g表示在全局環境安裝,以便任何項目都能使用它
運行時注意查看命令行有沒有錯誤信息,安裝完成後,你可使用下面的命令查看gulp的版本號以確保gulp已經被正確安裝。
gulp -v
接下來,咱們須要將gulp安裝到項目本地
npm install —-save-dev gulp
這裏,咱們使用—-save-dev
來更新package.json文件,更新devDependencies
值,以代表項目須要依賴gulp。
Dependencies
能夠向其餘參與項目的人指明項目在開發環境和生產環境中的node模塊依懶關係,想要更加深刻的瞭解它能夠看看package.json文檔。
安裝好gulp後咱們須要告訴它要爲咱們執行哪些任務,首先,咱們本身須要弄清楚項目須要哪些任務。
npm install gulp-jshint gulp-sass gulp-concat gulp-uglify gulp-rename gulp-jshint-html-reporter --save-dev
如今,組件都安裝完畢,咱們須要新建gulpfile文件以指定gulp須要爲咱們完成什麼任務。
gulp只有五個方法: task
,run
,watch
,src
,和dest
,在項目根目錄新建一個js文件並命名爲gulpfile.js,把下面的代碼粘貼進去:
gulpfile.js
// 引入 gulp var gulp = require('gulp'); // 引入組件 var jshint = require('gulp-jshint'); var sass = require('gulp-sass'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); var rename = require('gulp-rename'); // 檢查腳本 gulp.task('jshint', function() { gulp.src('./js/*.js') .pipe(jshint()) // .pipe(jshint.reporter('default')); //默認在命令行裏輸出結果 .pipe(jshint.reporter('gulp-jshint-html-reporter', {filename:'jshint-report.html'})); //輸出結果到 自定義的html文件 }); // 編譯Sass gulp.task('sass', function() { gulp.src('./scss/*.scss') .pipe(sass()) .pipe(gulp.dest('./css')); }); // 合併,壓縮文件 gulp.task('scripts', function() { gulp.src('./js/*.js') .pipe(concat('all.js')) .pipe(gulp.dest('./dist')) .pipe(rename('all.min.js')) .pipe(uglify()) .pipe(gulp.dest('./dist')); }); // 默認任務 gulp.task('default', function(){ gulp.run('lint', 'sass', 'scripts'); // 監聽文件變化 gulp.watch('./js/*.js', function(){ gulp.run('lint', 'sass', 'scripts'); }); });
如今,分段解釋下這段代碼。
var gulp = require('gulp'); var jshint = require('gulp-jshint'); var sass = require('gulp-sass'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); var rename = require('gulp-rename');
這一步,咱們引入了核心的gulp和其餘依賴組件,接下來,分開建立lint, sass, scripts 和 default這四個不一樣的任務。
gulp.task('lint', function() { gulp.src('./js/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')); });
Link任務會檢查js/
目錄下得js文件有沒有報錯或警告。
gulp.task('sass', function() { gulp.src('./scss/*.scss') .pipe(sass()) .pipe(gulp.dest('./css')); });
Sass任務會編譯scss/
目錄下的scss文件,並把編譯完成的css文件保存到/css
目錄中。
gulp.task('scripts', function() { gulp.src('./js/*.js') .pipe(concat('all.js')) .pipe(gulp.dest('./dist')) .pipe(rename('all.min.js')) .pipe(uglify()) .pipe(gulp.dest('./dist')); });
scripts任務會合並js/
目錄下得全部得js文件並輸出到dist/
目錄,而後gulp會重命名、壓縮合並的文件,也輸出到dist/
目錄。
gulp.task('default', function(){ gulp.run('lint', 'sass', 'scripts'); gulp.watch('./js/*.js', function(){ gulp.run('lint', 'sass', 'scripts'); }); });
這時,咱們建立了一個基於其餘任務的default任務。使用.run()
方法關聯和運行咱們上面定義的任務,使用.watch()
方法去監聽指定目錄的文件變化,當有文件變化時,會運行回調定義的其餘任務。
如今,回到命令行,能夠直接運行gulp任務了。
gulp
這將執行定義的default任務,換言之,這和如下的命令式同一個意思
gulp default
固然,咱們能夠運行在gulpfile.js中定義的任意任務,好比,如今運行sass任務:
gulp sass
如今已經作到了設置gulp任務而後運行他們,如今再回顧下以前學習的。