zoukankan      html  css  js  c++  java
  • 整理gulp自动化构建工具(包含PostCss)

    教程地址:http://segmentfault.com/a/1190000000372547     http://www.w2bc.com/Article/12941

    1、安装nodejs

    2、新建package.json文件

    3、全局和本地安装gulp

    4、使用npm安装gulp插件(如:gulp-jshint、gulp-sass、gulp-mini-css、gulp-uglify等)

    5、新建gulpfile.js文件

    6、通过命令提示符运行gulp任务

    PostCss插件概览:https://github.com/postcss/postcss#plugins

     

    说明:

    package.json是基于nodejs项目必不可少的配置文件,它是存放在项目根目录的普通json文件。它是一个普通json文件,所以不能添加任何注释。安装gulp插件的时候如果提示npm warn package.json这样的问题,请在package.json文件里添加"private": true,即将应用程序标记为私有。

    gulpfile.js文件参考:

    // 引入 gulp
    var gulp = require('gulp');
    
    // 引入组件
    var Autoprefixer = require('gulp-autoprefixer');//自动添加浏览器前缀
    var htmlmin = require('gulp-htmlmin');//压缩html,可以压缩页面js、css
    var imagemin = require('gulp-imagemin');//压缩图片文件(包括PNG、JPEG、GIF和SVG图片)
    var minifycss = require('gulp-minify-css');//压缩css文件,并给引用url添加版本号避免缓存
    var revappend = require('gulp-rev-append');//给页面的引用添加版本号,清除页面引用缓存
    var spritesmith = require('gulp.spritesmith');//生成sprites图片和样式表
    var less = require('gulp-less');//编译Less
    var csslint = require('gulp-csslint');//检查css有无报错或警告
    var jshint = require('gulp-jshint');//检查js有无报错或警告
    var concat = require('gulp-concat');//合并js文件
    var uglify = require('gulp-uglify');//压缩js文件
    var babel = require('gulp-babel');//转换代码为ES6最新语法形式
    
    //引入PostCss
    var postcss = require('gulp-postcss');
    var bem = require('postcss-bem');
    var cssNext = require('postcss-cssnext');
    var px2rem = require('postcss-px2rem');//px转换成rem
    var autoprefixer = require('autoprefixer-core');
    var postcssSimpleVars = require("postcss-simple-vars");
    var postcssMixins = require("postcss-mixins");
    var postcssNested = require("postcss-nested");
    var sourcemaps = require("gulp-sourcemaps");
    
    
    //nodeJS中管道式方法的api一般为.pipe()方法,管道化执行组件任务,它很类似jQuery中的链式写法
    
    //定义一个Less任务(自定义任务名称)
    // 编译Less
    gulp.task('less', function() {
        gulp.src('./less/*.less') //该任务针对的文件,*代表所有文件
            .pipe(less()) //该任务调用的模块
            .pipe(gulp.dest('./css')); //将会在css目录下生成.css文件
    });
    
    //postcss处理css.
    gulp.task("postcss", function(){
        var processors = [
            postcssMixins,
            postcssSimpleVars,
            postcssNested,
            cssNext,
            bem({style: 'bem'}),
            px2rem({
                remUnit: 75
            }),
            autoprefixer({
                browsers: ["Android 4.1", "iOS 7.1", "Chrome > 31", "ff > 31", "ie >= 10"]
            })];
    
        return gulp.src(['./css/*.css'])
            .pipe(sourcemaps.init())
            .pipe(postcss(processors))
            .pipe(sourcemaps.write("."))
            .pipe(gulp.dest("./stylesheets"));
    });
    
    //生成sprites图片和样式表
    gulp.task('sprite', function () {
        var spriteData = gulp.src('./images/*.png').pipe(spritesmith({
            imgName: 'sprite.png',
            cssName: 'sprite.css'
        }));
        return spriteData.pipe(gulp.dest('./sprite'));
    });
    
    //根据设置浏览器版本自动处理浏览器前缀
    gulp.task('testAutoFx', function () {
        gulp.src('./css/*.css')
            .pipe(Autoprefixer({
                browsers: ['last 2 versions'], //主流浏览器的最新两个版本
                cascade: true, //是否美化属性值 默认:true 像这样:
                //-webkit-transform: rotate(45deg);
                //        transform: rotate(45deg);
                remove:true //是否去掉不必要的前缀 默认:true
            }))
            .pipe(gulp.dest('./dist/css'));
    });
    
    //将px转换成rem
    gulp.task('px2rem', function() {
        var processors = [
            px2rem({
                remUnit: 75
            })
        ];
        return gulp.src('./css/*.css')
            .pipe(postcss(processors))
            .pipe(gulp.dest('./dest'));
    });
    
    //转换代码为ES6最新语法形式
    gulp.task('babel', function() {
        return gulp.src('./js/*.js')
            .pipe(babel())
            .pipe(gulp.dest('dist/es6'));
    });
    
    //压缩HTML
    gulp.task('testHtmlmin', function () {
        var options = {
            removeComments: true,//清除HTML注释
            collapseWhitespace: true,//压缩HTML
            collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
            removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
            removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
            removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
            minifyJS: true,//压缩页面JS
            minifyCSS: true//压缩页面CSS
        };
        gulp.src('*.html')
            .pipe(htmlmin(options))
            .pipe(gulp.dest('./dist/html'));
    });
    
    //压缩图片
    gulp.task('testImagemin', function () {
        gulp.src('./images/*.{png,jpg,gif,ico}')
            .pipe(imagemin({
                optimizationLevel: 5, //类型:Number  默认:3  取值范围:0-7(优化等级)
                progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
                interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
                multipass: true //类型:Boolean 默认:false 多次优化svg直到完全优化
            }))
            .pipe(gulp.dest('./dist/images'));
    });
    
    //压缩css
    gulp.task('testCssmin', function () {
        gulp.src('./css/*.css')
            .pipe(minifycss())
            .pipe(gulp.dest('./dist/css'));
    });
    // 检查css
    gulp.task('csslint', function() {
        gulp.src('./css/*.css')
            .pipe(csslint())
            .pipe(csslint.reporter());
    });
    
    // 检查js
    gulp.task('jslint', function() {
        gulp.src('./js/*.js')
            .pipe(jshint())
            .pipe(jshint.reporter('default'));
    });
    
    // 合并、压缩js文件
    gulp.task('scripts', function() {
        gulp.src('./js/*.js')
            .pipe(concat('all.js'))
            .pipe(gulp.dest('./dist'))
            .pipe(rename('all.min.js'))
            .pipe(uglify())
            .pipe(gulp.dest('./dist/js'));
    });
    
    //每个gulpfile.js里都应当有一个dafault任务,它是缺省任务入口
    // 定义默认任务
    gulp.task('default', function(){
        gulp.run('postcss', 'csslint', 'testImagemin', 'jslint', 'testCssmin', 'scripts');// 表示运行对应的任务
    
        // 监听文件变化,若有改动则执行以下三个任务
        gulp.watch('./js/*.js', function(){
            gulp.run('postcss', 'csslint', 'jslint', 'testCssmin', 'scripts');
        });
    });
  • 相关阅读:
    java程序后台报错java.net.SocketException: Too many open files
    linux中,查看某个命令是来自哪个RPM包或者是通过哪个RPM包安装的
    Oracle卸载之linux快速卸载rac脚本-一键卸载
    40个DBA日常维护的SQL脚本
    Oracle SQL开发 之 Select语句完整的执行顺序
    Oracle开发 之 主-外键约束FK及约束的修改
    drop user 报错ora-00604
    oracle Bug 4287115(ora-12083)
    Ora-1157 ora-1110错误解决案例一枚
    rac库grid目录权限(6751)导致数据库宕机案例 此方法仅用于紧急救助
  • 原文地址:https://www.cnblogs.com/gyx19930120/p/4773123.html
Copyright © 2011-2022 走看看