ionic开发介绍之gulp 简绍二

本文只是简单的简绍。适用于刚刚开发ionic项目的同学学习了解

为了实现边修改边出效果的功能,我们需要使用gulp-watch来 实现,以上介绍的gulpfile.js模板只是学习示例,在实际的项目中应为要对js、css、html、图片,进行压缩,以及在组合(把多个文件合成一个,以减少网络请求次数),因此需要把源文件和编译好的文件分开放置。一般源文件放在src目录,编译好的文件放到www目录,www为网页的根目录,用于存放可以执行的网页。结合以上各个功能就有了一下gulpfile.js文件的设计,当然这个文件是我借鉴的。


关于详细的gulpfile.js编写,请参考:http://www.cnblogs.com/2050/p/4198792.html

以下提供一个比较好的gulpfile.js,更具自己的项目配置文件里的路径参数。

var gulp = require('gulp');
var gutil = require('gulp-util');
var bower = require('bower');
var concat = require('gulp-concat');
var sass = require('gulp-sass');
var minifyCss = require('gulp-minify-css');
var rename = require('gulp-rename');
var sh = require('shelljs');
var uglify = require('gulp-uglify');
var foreach = require('gulp-foreach');
var htmlmin = require('gulp-htmlmin');
var notify = require("gulp-notify");
var preen = require('preen');
var sourcemaps = require('gulp-sourcemaps');
var imagemin = require('gulp-imagemin');
var autoprefixer = require('gulp-autoprefixer');
var path = require('path');
var del = require('del');

var paths = {
    sass: ['scss/**/*.scss'],
    index: 'app/index.html',
    scripts: ['app/js/app.js', 'app/js/**/*.js'],
    styles: 'app/scss/**/*.*',
    templates: 'app/templates/**/*.*',
    images: 'app/img/**/*.*',
    lib: 'www/lib/**/*.*',
    //Destination folders
    destImages: './www/img/',
    destTemplates: './www/templates/'
};

gulp.task('default', ['sass', 'index', 'scripts', 'styles', 'templates', 'images', 'lib']);

gulp.task('serve', function(done){
    sh.exec('ionic serve', done); 
});

gulp.task('sass', function(done) {
    gulp.src('./scss/ionic.app.scss')
        .pipe(sass())
        .on('error', sass.logError)
        .pipe(gulp.dest('./www/css/'))
        .pipe(minifyCss({
            keepSpecialComments: 0
        }))
        .pipe(rename({ extname: '.min.css' }))
        .pipe(gulp.dest('./www/css/'))
        .on('end', done);
});

gulp.task('index', function() {
    return gulp.src(paths.index)
        .pipe(htmlmin({ collapseWhitespace: true }))
        .pipe(gulp.dest("./www/"))
        .pipe(notify({ message: 'Index built' }));
});

gulp.task('scripts', function() {
    return gulp.src(paths.scripts)
        .pipe(sourcemaps.init())
        .pipe(concat("app.js"))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest("./www/build/"))
        .pipe(rename('app.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest("./www/build/"))
        .pipe(notify({ message: 'Scripts built' }));
});

gulp.task('styles', function() {
    return gulp.src(paths.styles)
        .pipe(sourcemaps.init())
        .pipe(sass())
        .pipe(autoprefixer('last 2 version'))
        .pipe(concat('style.css'))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('./www/css/'))
        .pipe(rename({ suffix: '.min' }))
        .pipe(minifyCss())
        .pipe(gulp.dest('./www/css/'))
        .pipe(notify({ message: 'Styles built' }));
});

function MinifyTemplates(path, destPath) {
    return gulp.src(path)
        .pipe(htmlmin({ collapseWhitespace: true }))
        .pipe(gulp.dest(destPath || paths.destTemplates));
}

gulp.task('templates', ['clean-templates'], function() {
    return MinifyTemplates(paths.templates).on('end', function() {
        gulp.src('').pipe(notify({ message: 'Templates built' }))
    });
});

function MinifyImages(path, destPath) {
    return gulp.src(path)
        .pipe(imagemin({ optimizationLevel: 5 }))
        .pipe(gulp.dest(destPath || paths.destImages));
}

gulp.task('images', ['clean-images'], function() {
    return MinifyImages(paths.images).on('end', function() {
        gulp.src('').pipe(notify({ message: 'Images built' }))
    });
});

gulp.task('lib', function(done) {
    //https://forum.ionicframework.com/t/how-to-manage-bower-overweight/17997/10?u=jdnichollsc
    preen.preen({}, function() {
        gulp.src('').pipe(notify({ message: 'Lib built' }));
        done();
    });
});

gulp.task('clean-images', function() {
    return del(paths.destImages);
});

gulp.task('clean-templates', function() {
    return del(paths.destTemplates);
});

gulp.task('watch', function() {
    gulp.watch(paths.sass, ['sass']);
    gulp.watch(paths.index, ['index']);
    gulp.watch(paths.scripts, ['scripts']);
    gulp.watch(paths.styles, ['styles']);
    gulp.watch(paths.templates, function(event){
        var destPathFile = path.join('./www', path.relative(path.join(__dirname, './app'), event.path));
        if(event.type === "deleted"){
            del(destPathFile);
        }else{
            var pathFile = path.relative(__dirname, event.path);
            var destPath = path.dirname(destPathFile);
            MinifyTemplates(pathFile, destPath).on('end', function() {
                gulp.src('').pipe(notify({ message: 'Template built' }))
            });
        }
    });
    gulp.watch(paths.images, function(event){
        var destPathFile = path.join('./www', path.relative(path.join(__dirname, './app'), event.path));
        if(event.type === "deleted"){
            del(destPathFile);
        }else{
            var pathFile = path.relative(__dirname, event.path);
            var destPath = path.dirname(destPathFile);
            MinifyImages(pathFile, destPath).on('end', function() {
                gulp.src('').pipe(notify({ message: 'Image built' }))
            });
        }
    });
    gulp.watch(paths.lib, ['lib']);
});

gulp.task('install', ['git-check'], function() {
    return bower.commands.install()
        .on('log', function(data) {
            gutil.log('bower', gutil.colors.cyan(data.id), data.message);
        });
});

gulp.task('git-check', function(done) {
    if (!sh.which('git')) {
        console.log(
            '  ' + gutil.colors.red('Git is not installed.'),
            '\n  Git, the version control system, is required to download Ionic.',
            '\n  Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.',
            '\n  Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.'
        );
        process.exit(1);
    }
    done();
});

这个gulpfile.js使用方法如下,

gulp 编译整个项目到www目录

gulp watch 开始监控源码目录(app)的变化,并编译变化的部分,并更新到www目录

更新后如果浏览器没有自动刷新,可以手工点击刷新,如果想要使用自动刷新,参考如下连接的文章末尾。


关于,gulp的更进一步,构建完整的结构框架,请参考:

https://github.com/chenbin92/ionic-quickstarter-with-gulp



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值