• 前端自动化工具之--gulp


    前端构建工具——实现前端代码的编译(sass、less)、压缩、测试;图片的压缩以及浏览器自动刷新等等功能。 Gulp 基于Node.js的前端构建工具,Gulp有许多插件( 这里是插件 ),使用Gulp可以实现前端代码的编译(sass、less)、压缩、图片的压缩等,当然主要是前端工程化,不过我目前只是需要压缩文件,至于Grunt,相比于Gulp太慢了,当然还有现在流行的webpack也是很强大的自动化工具,今天我们来了解一下,gulp 如何实现自动化: 假如有个本地目录如下图:

    当然 你也可以是其他文件夹,需要和下面代码对应,可以自己修改。

     接下来,我们安装配置相关工具:

    环境:

    Windows,安装Node https://nodejs.org/en/

    安装Gulp:

    1,全局安装,执行:npm install gulp -g

    2,本地目录安装,cmd 到你的项目根目录,执行: npm install gulp --save-dev

    安装插件:

    执行:npm install 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及组件
    
    var gulp = require('gulp'),
    
      autoprefixer = require('gulp-autoprefixer'),
    
      minifycss = require('gulp-minify-css'), //压缩css
    
      jshint = require('gulp-jshint'), //js代码校验
    
      uglify = require('gulp-uglify'), //压缩JS
    
      imagemin = require('gulp-imagemin'), //压缩图片
    
      rename = require('gulp-rename'), //合并js文件
    
      concat = require('gulp-concat'),
    
      notify = require('gulp-notify'),
    
      cache = require('gulp-cache'),
    
      livereload = require('gulp-livereload'),
    
      del = require('del');
    
    建立任务:
    
     
    
      // Styles 压缩CSS
    
    gulp.task('styles', function() {
    
      return gulp.src('src/css/*.css')    //压缩的文件路径
    
        .pipe(rename({ suffix: '.min' }))
    
        .pipe(minifycss())
    
        .pipe(gulp.dest('dist/css'))   //生成文件位置
    
        .pipe(notify({ message: 'Styles task complete' }));
    
    });
    
     
    
    // Scripts  压缩JS
    
    gulp.task('scripts', function() {
    
      return gulp.src('src/js/**/*.js')  //压缩的文件路径  *代表压缩文件夹中的所有文件,你可以指定某一个
    
        .pipe(jshint('.jshintrc'))
    
        .pipe(jshint.reporter('default'))
    
        .pipe(concat('main.js'))          //压缩的文件
    
        .pipe(rename({ suffix: '.min' }))    //压缩后名字
    
        .pipe(uglify())
    
        .pipe(gulp.dest('dist/js'))    //生成文件位置
    
        .pipe(notify({ message: 'Scripts task complete' }));
    
    });
    
    // Images
    
    gulp.task('images', function() {
    
      return gulp.src('src/images/**/*')    //压缩的文件路径
    
        .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
    
        .pipe(gulp.dest('dist/images'))   //生成文件位置
    
        .pipe(notify({ message: 'Images task complete' }));
    
    });
    
     
    
    // Clean  任务执行前,先清除之前生成的文件
    
    gulp.task('clean', function(cb) {
    
        del(['dist/assets/css', 'dist/assets/js', 'dist/assets/img'], cb)
    
    });
    
     
    
    // Default task  设置默认任务
    
    gulp.task('default', ['clean'], function() {
    
        gulp.start('styles', 'scripts', 'images');
    
    });
    
    监听文件:
    
    // Watch
    
    gulp.task('watch', function() {
    
      // Watch .scss files
    
      gulp.watch('src/css/**/*.css', ['styles']);
    
      // Watch .js files
    
      gulp.watch('src/js/**/*.js', ['scripts']);
    
      // Watch image files
    
      gulp.watch('src/images/**/*', ['images']);
    
      // Create LiveReload server
    
      livereload.listen();
    
      // Watch any files in dist/, reload on change
    
      gulp.watch(['dist/**']).on('change', livereload.changed);
    
     
    
    });

    // 引入 gulp及组件

    var gulp = require('gulp'),

      autoprefixer = require('gulp-autoprefixer'),

      minifycss = require('gulp-minify-css'), //压缩css

      jshint = require('gulp-jshint'), //js代码校验

      uglify = require('gulp-uglify'), //压缩JS

      imagemin = require('gulp-imagemin'), //压缩图片

      rename = require('gulp-rename'), //合并js文件

      concat = require('gulp-concat'),

      notify = require('gulp-notify'),

      cache = require('gulp-cache'),

      livereload = require('gulp-livereload'),

      del = require('del');

    建立任务:

     

      // Styles 压缩CSS

    gulp.task('styles', function() {

      return gulp.src('src/css/*.css')    //压缩的文件路径

        .pipe(rename({ suffix: '.min' }))

        .pipe(minifycss())

        .pipe(gulp.dest('dist/css'))   //生成文件位置

        .pipe(notify({ message: 'Styles task complete' }));

    });

     

    // Scripts  压缩JS

    gulp.task('scripts', function() {

      return gulp.src('src/js/**/*.js')  //压缩的文件路径  *代表压缩文件夹中的所有文件,你可以指定某一个

        .pipe(jshint('.jshintrc'))

        .pipe(jshint.reporter('default'))

        .pipe(concat('main.js'))          //压缩的文件

        .pipe(rename({ suffix: '.min' }))    //压缩后名字

        .pipe(uglify())

        .pipe(gulp.dest('dist/js'))    //生成文件位置

        .pipe(notify({ message: 'Scripts task complete' }));

    });

    // Images

    gulp.task('images', function() {

      return gulp.src('src/images/**/*')    //压缩的文件路径

        .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))

        .pipe(gulp.dest('dist/images'))   //生成文件位置

        .pipe(notify({ message: 'Images task complete' }));

    });

     

    // Clean  任务执行前,先清除之前生成的文件

    gulp.task('clean', function(cb) {

        del(['dist/assets/css', 'dist/assets/js', 'dist/assets/img'], cb)

    });

     

    // Default task  设置默认任务

    gulp.task('default', ['clean'], function() {

        gulp.start('styles', 'scripts', 'images');

    });

    监听文件:

    // Watch

    gulp.task('watch', function() {

      // Watch .scss files

      gulp.watch('src/css/**/*.css', ['styles']);

      // Watch .js files

      gulp.watch('src/js/**/*.js', ['scripts']);

      // Watch image files

      gulp.watch('src/images/**/*', ['images']);

      // Create LiveReload server

      livereload.listen();

      // Watch any files in dist/, reload on change

      gulp.watch(['dist/**']).on('change', livereload.changed);

     

    });

    然后在 cdm执行任务就可以了,例如:压缩css执行 [ gulp styles ],等待执行完成,你就可以在dist目录下找到压缩好了的文件,如下图

    看看压缩后和压缩前的大小:

     

    windows 下删除 node_modules 文件夹会提示源路径太长无法删除什么的,找到个方法

    gulpDemo 下新建个空文件夹,随便命名:r

    然后cmd 进入gulpDemo,输入命令: Robocopy /MIR r node_modules

    等待命令执行完,时间可能有点长,然后删除空文件夹即可。

     

    可能遇到的问题:

     报错

    解决办法:npm install --save-dev jshint gulp-jshint

    参考:http://stackoverflow.com/questions/33984558/gulp-error-cannot-find-module-jshint-src-cli

     

    要每天多努力一些,比别人多努力一个小时。
  • 相关阅读:
    Vim 使用设置
    stm32之CAN发送、接收详解
    stm32内部的CAN总线
    stm32之CAN总线基础
    JavaScript之Ajax
    JavaScript之insertBefore()和自定义insertAfter()的用法。
    JavaScript之向文档中添加元素和内容的方法
    JavaScript之共享onload
    JavaScrtip之JS最佳实践
    XX秘籍
  • 原文地址:https://www.cnblogs.com/leeyen/p/6845838.html
Copyright © 2020-2023  润新知