zoukankan      html  css  js  c++  java
  • 前端构建之gulp与常用插件

    gulp是什么?

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

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

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

    那些常用的gulp插件

    No.1、run-sequence

    Links: https://www.npmjs.com/package/run-sequence

    作用:让gulp任务,可以相互独立,解除任务间的依赖,增强task复用

    推荐指数:★★★★★

    No.2、browser-sync

    Links: http://www.browsersync.io/

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

    推荐指数:★★★★★

    No.3、del

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

    作用:删除文件/文件夹

    推荐指数:★★★★★

    No.4、gulp-coffee

    Links: https://github.com/wearefractal/gulp-coffee

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

    推荐指数:★★★★

    No.5、coffee-script

    Links: https://www.npmjs.com/package/coffee-script

    作用:gulpfile默认采用js后缀,如果要使用gulpfile.coffee来编写,那么需要此模块

    推荐指数:★★★

    No.6、gulp-nodemon

    Links: https://www.npmjs.com/package/gulp-nodemon

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

    推荐指数:★★★★★

    No.7、yargs

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

    作用:用于获取启动参数,针对不同参数,切换任务执行过程时需要

    推荐指数:★★★

    No.8、gulp-util

    Links: https://www.npmjs.com/package/gulp-util

    作用:gulp常用的工具库

    推荐指数:★★★★★

    No.9、gulp-uglify

    Links: https://www.npmjs.com/package/gulp-uglify

    作用:通过UglifyJS来压缩JS文件

    推荐指数:★★★★

    No.9、gulp-concat

    Links: https://www.npmjs.com/package/gulp-concat

    作用:合并JS

    推荐指数:★★★★

    No.10、gulp-sourcemaps

    Links: https://www.npmjs.com/package/gulp-sourcemaps

    作用:处理JS时,生成SourceMap

    推荐指数:★★★★

    No.11、gulp-less

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

    作用:将less预处理为css

    推荐指数:★★★★

    No.12、gulp-sass

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

    作用:将sass预处理为css

    推荐指数:★★★★

    No.13、gulp-autoprefixer

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

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

    推荐指数:★★★★

    No.14、gulp-minify-css

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

    作用:压缩css。

    推荐指数:★★★★

    No.15、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...
    )
    

    2016-3-27 12:33:38补充:

    由于connect-history-api-fallback这个包的用法改变,所以在browserSync中使用的时候,请使用middleware: [historyApiFallback()]

  • 相关阅读:
    22、输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
    21、我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
    20、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
    19、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
    【待补充】算法导论 笔记
    18、大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39
    17、把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
    二分查找算法
    16、用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
    15、输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
  • 原文地址:https://www.cnblogs.com/humin/p/4337442.html
Copyright © 2011-2022 走看看