前端构建之gulp与经常使用插件

gulp是什么?css

http://gulpjs.com/ 相信你会明白的!html

与著名的构建工具grunt相比,有什么优点呢?前端

  1. 易于使用,代码优于配置
  2. 高效,不会产生过多的中间文件,减小I/O压力
  3. 易于学习,API很是少,你能在很短的事件内学会gulp

那些经常使用的gulp插件

No.一、run-sequence

Linkshttps://www.npmjs.com/package/run-sequencenode

做用:让gulp任务,能够相互独立,解除任务间的依赖,加强task复用git

推荐指数:★★★★★github

No.二、browser-sync

Linkshttp://www.browsersync.io/npm

做用:静态文件服务器,同时也支持浏览器自动刷新json

推荐指数:★★★★★gulp

No.三、del

Links:https://www.npmjs.com/package/delapi

做用:删除文件/文件夹

推荐指数:★★★★★

No.四、gulp-coffee

Linkshttps://github.com/wearefractal/gulp-coffee

做用:编译coffee代码为Js代码,使用coffeescript必备

推荐指数:★★★★

No.五、coffee-script

Linkshttps://www.npmjs.com/package/coffee-script

做用:gulpfile默认采用js后缀,若是要使用gulpfile.coffee来编写,那么须要此模块

推荐指数:★★★

No.六、gulp-nodemon

Linkshttps://www.npmjs.com/package/gulp-nodemon

做用:自动启动/重启你的node程序,开发node服务端程序必备

推荐指数:★★★★★

No.七、yargs

Linkshttps://www.npmjs.com/package/yargs

做用:用于获取启动参数,针对不一样参数,切换任务执行过程时须要

推荐指数:★★★

No.八、gulp-util

Linkshttps://www.npmjs.com/package/gulp-util

做用:gulp经常使用的工具库

推荐指数:★★★★★

No.九、gulp-uglify

Linkshttps://www.npmjs.com/package/gulp-uglify

做用:经过UglifyJS来压缩JS文件

推荐指数:★★★★

No.九、gulp-concat

Linkshttps://www.npmjs.com/package/gulp-concat

做用:合并JS

推荐指数:★★★★

No.十、gulp-sourcemaps

Linkshttps://www.npmjs.com/package/gulp-sourcemaps

做用:处理JS时,生成SourceMap

推荐指数:★★★★

No.十一、gulp-less

Linkshttps://www.npmjs.com/package/gulp-less

做用:将less预处理为css

推荐指数:★★★★

No.十二、gulp-sass

Linkshttps://www.npmjs.com/package/gulp-sass

做用:将sass预处理为css

推荐指数:★★★★

No.1三、gulp-autoprefixer

Linkshttps://www.npmjs.com/package/gulp-autoprefixer

做用:使用Autoprefixer来补全浏览器兼容的css。

推荐指数:★★★★

No.1四、gulp-minify-css

Linkshttps://www.npmjs.com/package/gulp-minify-css

做用:压缩css。

推荐指数:★★★★

No.1五、connect-history-api-fallback

Linkshttps://www.npmjs.com/package/connect-history-api-fallback

做用:开发angular应用必须,用于支持HTML5 history API.

推荐指数:★★★

通常的gulpfile文件(采用coffee编写)

首先是,node应用程序:

gulp = require(‘gulp‘)
runSequence = require(‘run-sequence‘)

coffee = require(‘gulp-coffee‘)
gutil = require(‘gulp-util‘)
del = require(‘del‘)
nodemon = require(‘gulp-nodemon‘)
argv = require(‘yargs‘).argv
rename = require(‘gulp-rename‘)
browserSync = require(‘browser-sync‘)
reload = browserSync.reload

# 处理参数
isDebug = not (argv.r || false)

# --入口任务-----------------------------------------------------------------
gulp.task(‘default‘, (callback)->
  runSequence(
    [‘clean‘]
    [‘coffee-server‘, ‘copy-server‘, ‘copy-client‘, ‘coffee-client‘, ‘copy-views‘]
    ‘serve‘
    [‘browserSync‘, ‘watch‘]
    callback
  )
)
# --构建相关任务---------------------------------------
gulp.task(‘clean‘, (callback)->
  del([‘./dist/‘], callback)
)

gulp.task(‘coffee-server‘, ->
  gulp.src([
    ‘./src/**/*.coffee‘
    ‘!./src/public/**/*.coffee‘
    ‘!./src/views/**‘
  ])
  .pipe(coffee({bare: true}).on(‘error‘, gutil.log))
  .pipe(gulp.dest(‘./dist/‘))
)

gulp.task(‘copy-server‘, ->
  gulp.src([
    ‘./src/config*/*.json‘
    ‘./src/database*/*.*‘
  ])
  .pipe(gulp.dest(‘./dist/‘))
)

gulp.task(‘copy-client‘, ->
  gulp.src([
    ‘./src/public*/**/*‘
    ‘!./src/public*/**/*.coffee‘
  ])
  .pipe(gulp.dest(‘./dist/‘))
)

gulp.task(‘coffee-client‘, ->
  gulp.src([
    ‘./src/public*/**/*.coffee‘
  ])
  .pipe(coffee({bare: true}).on(‘error‘, gutil.log))
  .pipe(gulp.dest(‘./dist/‘))
)

gulp.task(‘copy-views‘, ->
  gulp.src(‘./src/views/**/*.html‘)
  .pipe(rename({extname: ‘.vash‘}))
  .pipe(gulp.dest(‘./dist/views‘))
)


# --启动程序,打开浏览器任务----------------------------------------------------
nodemon_instance = undefined
gulp.task(‘serve‘, (callback)->
  called = false
  if not nodemon_instance
    nodemon_instance = nodemon({
      script: ‘./dist/index.js‘
      ext: ‘none‘
    })
    .on(‘restart‘, ->
      console.log(‘restart server......................‘)
    )
    .on(‘start‘, ->
      if not called
        called = true
        callback()
    )
  else
    nodemon_instance.emit("restart")
    callback()
  nodemon_instance
)

gulp.task(‘browserSync‘, ->
  browserSync({
    proxy: ‘localhost:3000‘
    port: 8888
  #files: [‘./src/public/**/*‘]
    open: true
    notify: true
    reloadDelay: 500 # 延迟刷新
  })
)



# --监视任务------------------------------------------------
gulp.task(‘watch‘, ->
  gulp.watch([
    ‘./src/**/*.*‘
    ‘!./src/**/*.coffee‘
  ], [‘reload-client‘])
  gulp.watch(‘./src/**/*.coffee‘, [‘reload-server‘])
)

gulp.task(‘reload-client‘, (callback) ->
  runSequence(
    [‘copy-client‘, ‘coffee-client‘, ‘copy-views‘]
    ‘bs-reload‘
    callback
  )
)

gulp.task(‘reload-server‘, (callback) ->
  runSequence(
    [‘copy-server‘, ‘coffee-server‘]
    ‘serve‘
    ‘bs-reload‘
    callback
  )
)

gulp.task(‘bs-reload‘, ->
  browserSync.reload()
)

接下来是前端网站:

gulp = require(‘gulp‘)
gutil = require(‘gulp-util‘)
coffee = require(‘gulp-coffee‘)
del = require(‘del‘)
runSequence = require(‘run-sequence‘)
browserSync = require(‘browser-sync‘)
historyApiFallback = require(‘connect-history-api-fallback‘)
# 入口点
gulp.task(‘default‘, ->
  runSequence(
    [‘clean‘]
    [‘copy‘]
    [‘serve‘]
  )
)

gulp.task(‘copy‘, ->
  gulp.src([
    ‘./src/**/*.*‘
    ‘!./src/**/*.coffee‘
    ‘!./src/**/*.less‘
  ])
  .pipe(gulp.dest(‘./dist‘))
)

gulp.task(‘clean‘, (callback)->
  del([‘./dist/‘], callback)
)

gulp.task(‘serve‘, ->
  browserSync({
    server: {
      baseDir: "./dist"
      middleware: [historyApiFallback]
    }
    port: 2222
  })
)

gulp.task(‘watch‘, ->
  # do something...
)
相关文章
相关标签/搜索