// Generated on 2016-03-11 using generator-angular 0.15.1
'use strict';
var gulp = require('gulp');
/* 读取package.json文件里的Dependencies相关配置项,调用gulp api,将gulp插件加载进来,
返回对象是obj,该obj的key值与插件同名,指向每个插件,obj赋值给$符,
方便后续直接通过$获取到插件的引用
*/
var $ = require('gulp-load-plugins')();
var openURL = require('open');
var lazypipe = require('lazypipe');
var rimraf = require('rimraf');
var wiredep = require('wiredep').stream;
var runSequence = require('run-sequence');
/*声明app待编译路径和dist编译路径,dist路径上升一级,与app父级目录同级*/
var yeoman = {
app: require('./bower.json').appPath || 'app',
dist: '../build'
};
/*paths管理*/
var paths = {
scripts: [yeoman.app + '/scripts/**/*.js'],
styles: [yeoman.app + '/styles/**/*.scss'],
test: ['test/spec/**/*.js'],
testRequire: [
yeoman.app + '/bower_components/angular/angular.js',
yeoman.app + '/bower_components/angular-mocks/angular-mocks.js',
yeoman.app + '/bower_components/angular-resource/angular-resource.js',
yeoman.app + '/bower_components/angular-cookies/angular-cookies.js',
yeoman.app + '/bower_components/angular-sanitize/angular-sanitize.js',
yeoman.app + '/bower_components/angular-route/angular-route.js',
'test/mock/**/*.js',
'test/spec/**/*.js'
],
karma: 'karma.conf.js',
views: {
main: yeoman.app + '/main.html',
login: yeoman.app + '/index.html',
files: [yeoman.app + '/views/**/*.html']
}
};
// Reusable pipelines //
/*scripts检测*/
var lintScripts = lazypipe()
.pipe($.jshint, '.jshintrc')
.pipe($.jshint.reporter, 'jshint-stylish');
/*编译sacc,输出形式为expened的最接近手写css,precision 小数点保留位数
autoprefixer 指定适配厂商前缀 ,输出流到'.tmp/styles'目录*/
var styles = lazypipe()
.pipe($.sass, {
outputStyle: 'expanded',
precision: 10
})
.pipe($.autoprefixer, 'last 1 version')
.pipe(gulp.dest, '.tmp/styles');
///
// Tasks //
///
/*sass编译*/
gulp.task('styles', function () {
return gulp.src(paths.styles)
.pipe(styles());
});
/*scripts检测*/
gulp.task('lint:scripts', function () {
return gulp.src(paths.scripts)
.pipe(lintScripts());
});
/*删除.tmp*/
gulp.task('clean:tmp', function (cb) {
rimraf('./.tmp', cb);
});
/*启动clinet,事先会启动server和编译sass*/
gulp.task('start:client', ['start:server', 'styles'], function () {
openURL('http://localhost:9000');
});
/*启动一个server,将app和.tmp置为根目录*/
gulp.task('start:server', function() {
$.connect.server({
root: [yeoman.app, '.tmp'],
livereload: true,
// Change this to '0.0.0.0' to access the server from outside.
port: 9000
});
});
/*启动一个测试server*/
gulp.task('start:server:test', function() {
$.connect.server({
root: ['test', yeoman.app, '.tmp'],
livereload: true,
port: 9001
});
});
gulp.task('watch', function () {
$.watch(paths.styles)
.pipe($.plumber())
.pipe(styles())
.pipe($.connect.reload());
$.watch(paths.views.files)
.pipe($.plumber())
.pipe($.connect.reload());
$.watch(paths.scripts)
.pipe($.plumber())
.pipe(lintScripts())
.pipe($.connect.reload());
$.watch(paths.test)
.pipe($.plumber())
.pipe(lintScripts());
gulp.watch('bower.json', ['bower']);
});
/*启动一个服务,先清除.tmp目录,再检测js代码,再启动客户端程序(启动一个服务器,并翻译sass),开始watch*/
gulp.task('serve', function (cb) {
runSequence('clean:tmp',
['lint:scripts'],
['start:client'],
'watch', cb);
});
/*启动一个服务,跑的程序是dist下的预发版程序*/
gulp.task('serve:prod', function() {
$.connect.server({
root: [yeoman.dist],
livereload: true,
port: 9000
});
});
gulp.task('test', ['start:server:test'], function () {
var testToFiles = paths.testRequire.concat(paths.scripts, paths.test);
return gulp.src(testToFiles)
.pipe($.karma({
configFile: paths.karma,
action: 'watch'
}));
});
// 把真正所需要的文件引入到html文件中,就需要wiredep来帮忙
//wiredep解决了bower前端库引入进html的问题
// inject bower components
gulp.task('bower', function () {
return gulp.src(paths.views.main)
.pipe(wiredep())
.pipe(gulp.dest(yeoman.app + '/'));
});
///
// Build //
///
gulp.task('clean:dist', function (cb) {
rimraf('../build', cb);
});
gulp.task('client:build', ['html', 'styles'], function () {
/*js css在main.html中的引用会随文件名改变*/
var jsFilter = $.filter('**/*.js');
var cssFilter = $.filter('**/*.css');
return gulp.src(paths.views.main)
.pipe($.useref({searchPath: [yeoman.app, '.tmp']}))
.pipe(jsFilter)
.pipe($.ngAnnotate())
.pipe($.uglify())
.pipe(jsFilter.restore())
.pipe(cssFilter)
.pipe($.minifyCss({cache: true}))
.pipe(cssFilter.restore())
.pipe($.rev())
.pipe($.revReplace())
.pipe(gulp.dest(yeoman.dist));
});
gulp.task('html', function () {
return gulp.src(yeoman.app + '/views/**/*')
.pipe(gulp.dest(yeoman.dist + '/views'));
});
gulp.task('images', function () {
return gulp.src(yeoman.app + '/images/**/*')
.pipe($.cache($.imagemin({
optimizationLevel: 5,
progressive: true,
interlaced: true
})))
.pipe(gulp.dest(yeoman.dist + '/images'));
});
gulp.task('copy:extras', function () {
return gulp.src([yeoman.app + '/*.html','!'+yeoman.app +'/main.html'])
.pipe(gulp.dest(yeoman.dist));
});
gulp.task('copy:fonts', function () {
return gulp.src(yeoman.app + '/fonts/**/*')
.pipe(gulp.dest(yeoman.dist + '/fonts'));
});
gulp.task('build', ['clean:dist'], function () {
runSequence(['images', 'copy:extras', 'copy:fonts', 'client:build']);
});
gulp.task('default', ['build']);
gulpfile
最新推荐文章于 2023-11-07 17:01:11 发布