zoukankan      html  css  js  c++  java
  • gulp自动化构建工具

    首先使用 初始化命令填写一些基本信息;
    比如说作者、版本号、描述等等;

    npm init
    Bash

    如果全部一路回车按默认的话;
    生成的是这个样子的;

    {
      "name": "test",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    JavaScript

    然后在安装包的时候带上 --save-dev;
    那么安装的包的名称和版本号就会自动写入到 package.json 中的;
    可以同时安装多个包;举个栗子:

    cnpm install less jade --save-dev
    Bash

    生成:

    {
      "name": "test",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "jade": "^1.11.0",
        "less": "^2.7.1"
      }
    }
    JavaScript

    以后只需要复制这个 package.json 到需要写的项目的目录下;
    运行:

    cnpm install
    Bash

    即可逐个安装 devDependencies 中的包;
    再也不用一个一个的 cnpm install ... 了; 
    想更详细的了解 package.json 可以看这篇文章:
    npm package.json 属性详解 
    要使用gulp ;那首先还是要安装的;

    cnpm install -g gulp
    Bash

    老规矩;运行:

    gulp -v
    Bash

    能显示版本表示安装成功; 
    还记得之前文章的流程么?
    第二步都是运行包命令了;
    既然安装的包可以记录在 package.json 文件中;
    那运行的包的命令可不可以也记录在一个文件中呢?
    答案是肯定的;
    这个文件就叫做 gulpfile.js ;

    ok;我们就来拿gulp 处理scss举例说明:
    我们在 https://www.npmjs.com 上搜索 gulp sass;
    白俊遥博客
    我们直接就用第一个了;

    # 先安装gulp
    cnpm install gulp --save-dev
    # gulp-sass
    cnpm install gulp-sass --save-dev
    Bash

    手动创建 gulpfile.js 文件;

    // 引入 gulp 和gulp-sass
    var gulp = require('gulp');
    var sass = require('gulp-sass');
    // 编译scss
    gulp.task('css', function(){
        gulp.src('test.scss')
            .pipe(sass())
            .pipe(gulp.dest('css'))
    })
    JavaScript

    首先是 require 安装的包;比如说上面安装了 gulp 和 gulp-sass;

    1. task() 是定义一条任务; 
      第一个参数是任务的名称;

    第二个参数可以是一个闭包函数;
    在闭包函数中处理定义的任务;
    gulp.src() 中传需要处理的文件名的路径;
    gulp.src('css/test.scss') 表示要处理css目录下的test.scss 文件 
    gulp.src('css/*.scss') 表示要处理css目录下的所有 scss 文件 
    gulp.src('*/.scss') 表示要处理所有目录下的所有 scss 文件
    gulp.src('*/.+[scss|sass]') 表示要处理所有目录下的所有 scss 和 sass 文件

    pipe() 跟linux中的管道是一个意思;
    gulp.src('test.scss').pipe(sass()) 的意思就是把test.scss文件交给sass编译;

    gulp.dest() 传入输出的目录;
    gulp.dest('css') 表示输出到 css 目录下;
    gulp.src('*/.+(scss|sass)').pipe(sass()).pipe(gulp.dest('css'));
    串起来就是 把所有目录下的后缀为scss和sass文件都编译到css目录下;
    如果说还想再压缩下css呢?
    同理;先去搜索;然后install;接着require;pipe就行了;

    // 引入 gulp 和gulp-sass
    var gulp     = require('gulp');
    var sass     = require('gulp-sass');
    var minify   = require('gulp-minify-css');
    // 编译scss 并压缩
    gulp.task('css', function(){
        gulp.src('**/*.+(scss|sass)')
            .pipe(sass())
            .pipe(minify())
            .pipe(gulp.dest('css'))
    })
    JavaScript

    这样运行gulp css即可编译压缩;

    gulp css
    Bash

    但是改动下css文件就运行下 gulp css 也挺烦的;
    那接着来讲 watch 监听文件变化后自动处理; 
    gulp.watch() 第一个参数是文件路径;第二个参数是任务名数组;
    gulp.watch('*.scss', ['css']); 监听所有的scss文件;然后调用名为css的任务去处理;

    // 引入 gulp 和gulp-sass
    var gulp     = require('gulp');
    var sass     = require('gulp-sass');
    var minify   = require('gulp-minify-css');
    // 编译scss 并压缩
    gulp.task('css', function(){
        gulp.src('**/*.+(scss|sass)')
            .pipe(sass())
            .pipe(minify())
            .pipe(gulp.dest('css'))
    })
    // 监听文件
    gulp.task('server', function() {
        // 监听scss文件编译
        gulp.watch('*.scss', ['css']);
    });
    JavaScript

    运行一次命令即可一直监听了;

    gulp server
    Bash

    但是;还想再懒点;只打个gulp行不行呢?
    可以;定义个default命令即可;
    gulp.task('default', ['css', 'server']) ; 当输入gulp的时候;
    先执行 css 任务; 然后执行监听任务;

    // 引入 gulp 和gulp-sass
    var gulp     = require('gulp');
    var sass     = require('gulp-sass');
    var minify   = require('gulp-minify-css');
    // 编译scss 并压缩
    gulp.task('css', function(){
        gulp.src('**/*.+(scss|sass)')
            .pipe(sass())
            .pipe(minify())
            .pipe(gulp.dest('css'))
    })
    // 监听文件
    gulp.task('server', function() {
        // 监听scss文件编译
        gulp.watch('*.scss', ['css']);
    });
    // 默认事件
    gulp.task('default', ['css', 'server'])
    JavaScript

    以后只需要简单的gulp就可以了;

    gulp
    Bash

    还有js、自动刷新等功能就不一一举栗了;
    直接把一份现成的分享出来;

    package.json:

    {
      "name": "baijunyao/demo",
      "version": "1.0.0",
      "description": "白俊遥博客文章示例",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [
        "白俊遥",
        "博客"
      ],
      "author": "baijunyao",
      "license": "ISC",
      "devDependencies": {
        "babel-preset-es2015": "^6.18.0",
        "babel-preset-stage-2": "^6.18.0",
        "browser-sync": "^2.14.0",
        "gulp": "^3.9.1",
        "gulp-babel": "^6.1.2",
        "gulp-cleanhtml": "^1.0.1",
        "gulp-concat": "^2.6.0",
        "gulp-decomment": "^0.1.3",
        "gulp-imagemin": "^3.0.2",
        "gulp-less": "^3.1.0",
        "gulp-load-plugins": "^1.2.4",
        "gulp-minify-css": "^1.2.4",
        "gulp-plumber": "^1.1.0",
        "gulp-rename": "^1.2.2",
        "gulp-sass": "^2.3.2",
        "gulp-uglify": "^2.0.0"
      }
    }
    JavaScript

    gulpfile.js:

    var gulp        = require('gulp'),
        sass        = require('gulp-sass'),
        minifyCss   = require('gulp-minify-css'),
        plumber     = require('gulp-plumber'),
        babel       = require('gulp-babel'),
        uglify      = require('gulp-uglify'),
        clearnHtml  = require("gulp-cleanhtml");
        imagemin    = require('gulp-imagemin');
        browserSync = require('browser-sync').create(),
        reload      = browserSync.reload;
        
    // 定义源代码的目录和编译压缩后的目录
    var src='src',
        dist='build';
    // 编译全部scss 并压缩
    gulp.task('css', function(){
        gulp.src(src+'/**/*.scss')
            .pipe(sass())
            .pipe(minifyCss())
            .pipe(gulp.dest(dist))
    })
    // 编译全部js 并压缩
    gulp.task('js', function() {
      gulp.src(src+'/**/*.js')
        .pipe(plumber())
        .pipe(babel({
          presets: ['es2015']
        }))
        .pipe(uglify())
        .pipe(gulp.dest(dist));
    });
    // 压缩全部html
    gulp.task('html', function () {
        gulp.src(src+'/**/*.html')
        .pipe(clearnHtml())
        .pipe(gulp.dest(dist));
    });
    // 压缩全部image
    gulp.task('image', function () {
        gulp.src([src+'/**/*.+(jpg|jpeg|png|gif|bmp)'])
        .pipe(imagemin())
        .pipe(gulp.dest(dist));
    });
    // 自动刷新
    gulp.task('server', function() {
        browserSync.init({
            server: './'
        });
        // 监听scss文件编译
        gulp.watch(src+'/**/*.scss', ['css']);   
        // 监听html文件变化后刷新页面
        gulp.watch(src+"/**/*.js", ['js']).on("change", reload);
        // 监听html文件变化后刷新页面
        gulp.watch(src+"/**/*.html", ['html']).on("change", reload);
        // 监听css文件变化后刷新页面
        gulp.watch(dist+"/**/*.css").on("change", reload);
    });
    // 监听事件
    gulp.task('default', ['css', 'js', 'image', 'server'])
    JavaScript

    在线浏览demo:传送门
    下载demo:传送门

    下载下来后到 gulp 目录下先运行

    cnpm install
    Bash

    等安装完成后; 运行:

    gulp
    Bash

    这时候会自动打开浏览器访问 http://localhost:3000 ; 
    修改 demo/gulp/src/css/index.scss 中的背景色即可快速体验:

    body{
        background: red;
    }
    CSS

    可以编译压缩scss; 
    可以编译压缩es6;
    可以压缩图片;
    可以压缩html;
    可以自动刷新; 
    如果想自定义目录;
    那直接改 gulpfile.js 文件中定义的src和dits变量即可;

  • 相关阅读:
    [记录] 原生JS 的常用方法封装
    [记录] JavaScript 中的DOM操作
    [记录] JavaScript 中的正则表达式(案例分析)
    图片查看器插件(带缩略图) viewer.js
    (二) 美化滚动条 JScrollPane.js
    关于数据库存储过程管理的一点建议
    根据属性名称来改变XML节点值
    hdu 3911 Black And White
    poj 3667 Hotel
    hdu 4217 Data Structure?
  • 原文地址:https://www.cnblogs.com/weizaiyes/p/7069507.html
Copyright © 2011-2022 走看看