以前已經配置過一篇啦, 只不過那次是針對browserifyjavascript
搬運
http://markpop.github.io/2014/09/17/Gulp%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/css
你須要有package.json 不能是空文件哦 至少得有個{}才行,要否則npm不知道如何填寫依賴,--save-dev會報錯的html
$ npm install gulp --save-dev
國內環境要用cnpm喲!java
能夠一口氣安裝他們node
cnpm install gulp-ruby-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache del --save-dev
gulp-notify
gulp plugin to send messages based on Vinyl Files or Errors to Mac OS X, Linux or Windows using the node-notifier module. Fallbacks to Growl or simply loggingandroid
del
Delete files/folders using globsios
rimraf
The UNIX command rm -rf for nodegit
gulp-cache
原博這麼說的
Grunt的imagemin插件就利用了緩存來避免重複壓縮,而Gulp要利用gulp-cache來完成,固然啦,不只限定於緩存圖片。
好比以前build的時候已經壓縮了img中的圖片 後來又添加了一張 有了cache就能夠避免重複壓縮已經有的三張github
gulp-autoprefixer
Autoprefixer的每一個版本都包含一份最新的 Can I Use 數據
Autoprefixer默認將支持主流瀏覽器最近2個版本
主流瀏覽器最近2個版本用「last 2 versions」;
全球統計有超過1%的使用率使用「>1%」;
大於某個版本用「ff>20」或"ff>=20".npm
.pipe(autoprefixer({ browsers: ['last 2 versions'], cascade: false }))
OR
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
-src
--styles
-dist
--assets
---css
註冊一個任務
gulp.task('styles', function() {....});
假如你只想運行這一個task gulp styles
那麼如何一口氣運行多個任務呢
gulp.task('default', ['watch', 'scripts', 'images']);
自動更新是最重要的, 省得我再敲命令嘛
// Rerun the task when a file changes gulp.task('watch', function() { gulp.watch('src/styles/*.*', ['styles']); }); gulp.task('default', ['watch','styles']);
顯然這裏是針對文件改變後從新編譯 頁面並無刷新
sass的編譯使用 gulp-ruby-sass
不用gulp-sass的緣由是這個太大了 下載安裝要好久 並且容易安裝失敗(它還依賴node-sass)
原博可能由於時間早的緣故,其寫法目前是不能跑通的
gulp-ruby-sass Offcial Site
var gulp = require('gulp'); var sass = require('gulp-ruby-sass'); gulp.task('sass', function () { return sass('source/file.scss') .on('error', sass.logError) .pipe(gulp.dest('result')); });
//image gulp.task('images', function() { return gulp.src('src/styles/imgs/*') .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true }))) .pipe(gulp.dest('dist/css/img')) .pipe(notify({ message: 'Images task complete' })); }); gulp.task('scripts', function() { gulp.src('src/scripts/lib/*.js') .pipe(concat('lib.js')) .pipe(gulp.dest('dist/js/lib')); // Minify and copy all JavaScript (except vendor scripts) // with sourcemaps all the way down return gulp.src('src/scripts/*.js') .pipe(sourcemaps.init()) .pipe(jshint('.jshintrc')) .pipe(jshint.reporter('default')) .pipe(uglify()) .pipe(concat('all.min.js')) .pipe(sourcemaps.write()) .pipe(gulp.dest('dist/js')) .pipe(notify({ message: 'Scripts task complete' })); });
原博用的是gulp-livereload 可是我沒有懂他是如何用這個livereload的
沒看到原博是如何關聯 本身的服務器和 gulp-livereload
多是由於原博須要安裝一個Chrome插件 因此再也不代碼中關聯 這個解決辦法並很差
用gulp-connect
能夠幫助咱們自動刷新
gulp-connect Official Site
實際上它是 connect 和 gulp-livereload 的再封裝
咱們須要創建一個服務器
gulp.task('connectDist', function () { connect.server({ root: 'dist', port: 8001, livereload: true }); });
而後若是文件改變了 就讓當前服務器刷新
gulp.task('styles', function() { return rsass('src/styles/main.scss') .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4')) .pipe(gulp.dest('dist/css')) .pipe(rename({suffix: '.min'})) .pipe(minifycss()) .pipe(gulp.dest('dist/css')) .pipe(connect.reload()) .pipe(notify({ message: 'Styles task complete' })); });
固然了你的默認任務裏面要加上服務器這一個
gulp.task('default', ['connectDist','styles','images','scripts','html','watch']);
和gulp-connect差很少的方式
gulp.task('watch', function() { browserSync.init({ server: { baseDir: "./dist" } }); gulp.watch('sass/demo.scss', ['styles']).on('change', browserSync.reload); gulp.watch('src/styles/*.scss', ['styles']).on('change', browserSync.reload); gulp.watch('src/scripts/*.js', ['scripts']).on('change', browserSync.reload); gulp.watch('src/styles/imgs/*', ['images']).on('change', browserSync.reload); gulp.watch('src/index.html', ['html']).on('change', browserSync.reload); }); //使用 gulp-ruby-sass gulp.task('styles', function() { rsass('src/styles/main.scss', { sourcemap: true }) .on('error', sass.logError) .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4')) .pipe(minifycss()) // For inline sourcemaps .pipe(sourcemaps.write()) // For file sourcemaps .pipe(sourcemaps.write('maps', { includeContent: false, sourceRoot: 'src/styles' })) .pipe(gulp.dest('dist/css/')) .pipe(reload({stream: true})) .pipe(notify({ message: 'Styles task complete' })); });
http://stackoverflow.com/questions/21699146/gulp-js-task-return-on-src
https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support
return 用在存在依賴的task中
默認狀況下Gulp同時並行運行全部任務 可是有些任務是依賴前面任務運行結果的
因此用return
gulp.task('two', ['one'], function() { // task 'one' is done now });