'use strict'; var gulp = require('gulp'), path = require('path'), fs = require('fs'), config = require('./config'), _ = require('lodash'), $ = require('gulp-load-plugins')({ pattern: ['gulp-*', 'event-stream', 'main-bower-files', 'uglify-save-license', 'del'] }), browserSync = require('browser-sync'), gulpsync = $.sync(gulp), reload = browserSync.reload;//实时刷新 gulp.task('dev-config',function () { return gulp.src('app.conf.json') .pipe($.ngConfig(config.modules.ConstantModuleName,{ environment: 'development', createModule: false, wrap: true })) .pipe(gulp.dest(path.join(config.paths.src,'/app')))//join() 方法用于把数组中的所有元素放入一个字符串。 }); gulp.task('prod-config',function () { return gulp.src('app.conf.json') .pipe($.ngConfig(config.modules.ConstantModuleName,{ environment: 'production', createModule: false, wrap: true//生成闭包 })) .pipe(gulp.dest(path.join(config.paths.src,'/app'))) }); /** * [代码质量管理] */ gulp.task('jshint',function () { return gulp.src(path.join(config.paths.src,'app/**/*.js')) .pipe($.plumber(config.errorHandler())) .pipe($.jshint()) .pipe(reload({ stream: true })) .pipe($.size()); }); /** * [清理DIST,TEMP文件夹] */ gulp.task('clean', function () { $.del([path.join(config.paths.dist, '/'), path.join(config.paths.tmp, '/')]); }); /** * [编译之前将scss注入index.scss] */ gulp.task('inject_sass',function () { var injectFiles = gulp.src([ path.join(config.paths.src,'app/**/*.scss'), path.join('!'+ config.paths.src, 'app/index.scss') ],{read:false}); var injectOptions = { transform: function(filePath) { filePath = filePath.replace(config.paths.src + '/app/', ''); return '@import "' + filePath + '";'; }, starttag: '// injector', endtag: '// endinjector', addRootSlash: false }; return gulp.src(path.join(config.paths.src,'app/index.scss')) .pipe($.inject(injectFiles,injectOptions)) .pipe(gulp.dest(path.join(config.paths.src,'app/'))) }); gulp.task('clean', function () { $.del([path.join(config.paths.dist, '/'), path.join(config.paths.tmp, '/')]); }); /** * [SASS预编译模块,依赖compass模块编译] */ gulp.task('styles:compass',['inject_sass'],function () { return gulp.src(path.join(config.paths.src,'app/index.scss')) .pipe($.plumber(config.errorHandler())) .pipe($.sass()) //sprite图片路径修复 .pipe($.replace('../../../src/assets/images/', '../assets/images/')) .pipe(gulp.dest(path.join(config.paths.tmp,'/serve/app/'))) //css改变时无刷新改变页面 .pipe(reload({ stream: true })); }); /** * [Html中的CSS以及JS注入] */ gulp.task('inject', ['jshint', 'styles:compass','vendor:base'], function () { var injectStyles = gulp.src([ path.join(config.paths.tmp, '/serve/app/**/*.css') ], { read: false }); var injectScripts = gulp.src([ path.join(config.paths.src, '/app/**/*.js'), path.join('!' +config.paths.src, '/app/vendor.js'), ]).pipe($.angularFilesort()); var injectOptions = { ignorePath: [config.paths.src, path.join(config.paths.tmp, '/serve')], addRootSlash: false }; return gulp.src(path.join(config.paths.src, '/*.html')) .pipe($.plumber(config.errorHandler())) .pipe($.inject($.eventStream.merge( injectStyles, injectScripts ),injectOptions)) .pipe(gulp.dest(path.join(config.paths.tmp, '/serve'))); }); gulp.task('vendor', gulpsync.sync(['vendor:base', 'vendor:app']) ); /** * [复制依赖文件] */ gulp.task('vendor:base', function() { var jsFilter = $.filter('**/*.js',{restore: true}), cssFilter = $.filter('**/*.css',{restore: true}); return gulp.src(config.vendor.base.source,{base: 'bower_components'}) .pipe($.expectFile(config.vendor.base.source)) .pipe(jsFilter) .pipe($.concat(config.vendor.base.name+'.js')) .pipe(jsFilter.restore) .pipe(cssFilter) .pipe($.concat(config.vendor.base.name+'.scss')) .pipe(cssFilter.restore) .pipe(gulp.dest(config.vendor.base.dest)) ; }); gulp.task('vendor:app', function() { var jsFilter = $.filter('*.js',{restore: true}), cssFilter = $.filter('*.css',{restore: true}); return gulp.src(config.vendor.app.source, {base: 'bower_components'}) .pipe($.expectFile(config.vendor.app.source)) .pipe(jsFilter) .pipe(jsFilter.restore) .pipe(cssFilter) .pipe(cssFilter.restore) .pipe(gulp.dest(config.vendor.app.dest) ); });