-
-
Save byjml/f0598b908173b7e31b39 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var gulp = require('gulp'); | |
var sequence = require('run-sequence'); | |
var es = require('event-stream'); | |
var clean = require('gulp-clean'); | |
var htmlReplace = require('gulp-html-replace'); | |
var inject = require('gulp-inject'); | |
var compass = require('gulp-compass'); | |
var minifyCSS = require('gulp-minify-css'); | |
var ngAnnotate = require('gulp-ng-annotate'); | |
var uglify = require('gulp-uglify'); | |
var jshint = require('gulp-jshint'); | |
var concat = require('gulp-concat'); | |
var rename = require('gulp-rename'); | |
var plumber = require('gulp-plumber'); | |
var templateCache = require('gulp-angular-templatecache'); | |
var revall = require('gulp-rev-all'); | |
var notify = require('gulp-notify'); | |
var imagemin = require('gulp-imagemin'); | |
var pngquant = require('imagemin-pngquant'); | |
var browserSync = require('browser-sync'); | |
var naturalSort = require('gulp-natural-sort'); | |
var vendorLibs = | |
[ 'bower_components/angular-local-storage/angular-local-storage.min.js', | |
'bower_components/angular-ui-router/release/angular-ui-router.min.js', | |
'bower_components/angular-ui-select/dist/select.min.js', | |
'bower_components/angular-sanitize/angular-sanitize.min.js' | |
] | |
var angularLib = 'bower_components/angular/angular.min.js'; | |
var viewDir = '../app/views'; | |
var viewFile = viewDir+'/hp.blade.php'; | |
var partialsDir = 'partials'; | |
var imgDir = 'img'; | |
var distDir = 'dist'; | |
var distJsDir = distDir+'/js'; | |
var distCssDir = distDir+'/css'; | |
var angularCdn = 'https://ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js'; | |
var browserSyncProxy : 'app.dev'; | |
var angularModule : 'exampleApp'; | |
/** | |
* Returns a blade friendly template for js tags for inject plugin | |
**/ | |
function bladeJs(filename) { | |
return '{{ HTML::script("'+filename+'") }}'; | |
} | |
function bladeFallback(filename) { | |
return '<script>window.angular || document.write(\'<script src="{{URL::asset(\"'+filename+'\")}}"><\\/script>\')</script>'; | |
} | |
function bladeCss(filename) { | |
return '{{ HTML::style("'+filename+'") }}'; | |
} | |
gulp.task('cleanDist', function() { | |
return gulp.src(distDir, {read: false}) | |
.pipe(clean()) | |
.pipe(notify({onLast: true, message : 'Dist dir removed. Preparing for build time...' })); | |
}); | |
gulp.task('templateCache', function () { | |
return gulp.src(partialsDir+'/**/*.html') | |
.pipe(templateCache('templates.js', {module: angularModule, root: partialsDir})) | |
.pipe(gulp.dest('js')) | |
.pipe(notify({onLast: true, message : 'Template Cache generated from views' })); | |
}); | |
gulp.task('lintDev', function() { | |
return gulp.src('js/**/*.js') | |
.pipe(jshint()) | |
.pipe(jshint.reporter('default')); | |
}); | |
gulp.task('lintDist', function() { | |
return gulp.src(distDir+'/app.min.js') | |
.pipe(jshint()) | |
.pipe(jshint.reporter('default')); | |
}); | |
gulp.task('compassDist', function() { | |
return gulp.src('scss/**/*.scss') | |
.pipe(plumber()) | |
.pipe(compass({ | |
config_file : 'config.rb', | |
css: 'css', | |
sass: 'scss' | |
})) | |
.pipe(minifyCSS()) | |
.pipe(gulp.dest(distCssDir)) | |
.pipe(notify({onLast: true, message : 'Sass files converted and minified' })); | |
}); | |
gulp.task('compassDev', function() { | |
return gulp.src('scss/**/*.scss') | |
.pipe(plumber()) | |
.pipe(compass({ | |
config_file : 'config.rb', | |
css: 'css', | |
sass: 'scss' | |
})) | |
.pipe(minifyCSS()) | |
.pipe(gulp.dest('css')) | |
.pipe(browserSync.reload({stream:true})); | |
}); | |
gulp.task('imagemin', function() { | |
return gulp.src(imgDir+'/**/*') | |
.pipe(imagemin({ | |
progressive : true, | |
use : [pngquant()] | |
})) | |
.pipe(gulp.dest(distDir+'/images')) | |
.pipe(notify({onLast: true, message : 'Images compressed and saved to: '+distDir+'/images' })); | |
}); | |
gulp.task('appScripts', function() { | |
return gulp.src('js/**/*.js') | |
.pipe(plumber()) | |
.pipe(ngAnnotate()) | |
.pipe(naturalSort()) | |
.pipe(concat('app.js')) | |
.pipe(rename({suffix : '.min'})) | |
.pipe(uglify()) | |
.pipe(gulp.dest(distJsDir)) | |
.pipe(notify({onLast: true, message : 'App scripts compiled to: '+distDir })); | |
}); | |
gulp.task('vendorLibs', function() { | |
return gulp.src(vendorLibs) | |
.pipe(plumber()) | |
.pipe(concat('vendors.js')) | |
.pipe(uglify({compress: false})) | |
.pipe(gulp.dest(distJsDir)) | |
.pipe(gulp.src(angularLib)) | |
.pipe(gulp.dest(distJsDir)) | |
.pipe(notify({onLast: true, message : 'Vendor libs compiled to: '+distDir })); | |
}); | |
gulp.task('revision', function() { | |
return gulp.src([distCssDir+'/*.css', distJsDir+'/*.js']) | |
.pipe(revall()) | |
.pipe(gulp.dest(distDir)) | |
.pipe(notify({onLast: true, message : 'Files revisioned' })); | |
}); | |
gulp.task('htmlReplace', function(){ | |
return gulp.src(viewFile) | |
.pipe(htmlReplace({ | |
'js-angular-cdn' : { | |
src : angularCdn, | |
tpl : '{{ HTML::script("%s") }}' | |
} | |
})) | |
.pipe(gulp.dest(distDir)) | |
.pipe(notify({onLast: true, message : 'Rebuilding Blade templates...' })); | |
}); | |
gulp.task('buildIndex', ['htmlReplace'], function() { | |
return gulp.src(distDir+'/hp.blade.php') | |
.pipe(inject(gulp.src(distDir+'/style*.css'), | |
{ | |
starttag : '<!-- inject:style:{{ext}} -->', | |
transform : bladeCss | |
})) | |
.pipe(inject(gulp.src(distDir+'/angular.min*.js'), | |
{ | |
starttag : '<!-- inject:angular-fallback:{{ext}} -->', | |
transform: bladeFallback | |
})) | |
.pipe(inject(gulp.src(distDir+'/app*.js'), | |
{ | |
starttag : '<!-- inject:app:{{ext}} -->', | |
transform: bladeJs | |
})) | |
.pipe(inject(gulp.src(distDir+'/vendors*.js'), | |
{ | |
starttag : '<!-- inject:vendors:{{ext}} -->', | |
transform : bladeJs | |
})) | |
.pipe(gulp.dest(distDir)) | |
.pipe(notify({onLast: true, message : 'Blade template file rebuilt' })); | |
}); | |
gulp.task('cleanFinal', function() { | |
return gulp.src([distJsDir, distCssDir], {read: false}) | |
.pipe(clean()) | |
.pipe(notify({onLast: true, message : 'Final cleaning done.' })); | |
}); | |
gulp.task('watch', ['browser-sync'], function() { | |
gulp.watch('js/**/*.js', ['lintDev']); | |
gulp.watch('scss/**/*.scss', ['compassDev']); | |
gulp.watch('partials/**/*.html', ['templateCache']); | |
}); | |
gulp.task('browser-sync', function() { | |
browserSync({ | |
proxy: browserSyncProxy | |
}); | |
}); | |
gulp.task('build', function(callback) { | |
sequence( | |
'cleanDist', | |
['templateCache', 'compassDist', 'imagemin' ], | |
['appScripts', 'vendorLibs'], | |
'revision', | |
'buildIndex', | |
'cleanFinal', | |
callback | |
); | |
}); | |
gulp.task('default', ['build']); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "", | |
"version": "0.0.1", | |
"description": "", | |
"main": "gulpfile.js", | |
"dependencies": {}, | |
"devDependencies": { | |
"gulp": "~3.6.2", | |
"gulp-html-replace": "^1.1.0", | |
"gulp-uglify": "^0.3.0", | |
"gulp-jshint": "^1.6.1", | |
"gulp-concat": "^2.2.0", | |
"gulp-rename": "^1.2.0", | |
"gulp-compass": "^1.1.9", | |
"gulp-minify-css": "^0.3.4", | |
"gulp-ng-annotate": "^0.1.1", | |
"gulp-plumber": "^0.6.6", | |
"gulp-angular-templatecache": "^1.1.3", | |
"gulp-notify": "^1.2.5", | |
"gulp-clean": "^0.2.4", | |
"run-sequence": "^0.3.6", | |
"gulp-rev-all": "^0.2.0", | |
"event-stream": "^3.1.5", | |
"gulp-inject": "^0.4.1", | |
"gulp-imagemin": "^0.5.0", | |
"imagemin-pngquant": "^0.1.2", | |
"browser-sync": "^1.5.2", | |
"gulp-natural-sort": "^0.1.0" | |
}, | |
"scripts": { | |
"test": "echo \"Error: no test specified\" && exit 1", | |
"postinstall": "bower install", | |
"prestart": "npm install" | |
}, | |
"repository": { | |
"type": "git", | |
"url": "" | |
}, | |
"keywords": [ | |
"", | |
"", | |
"" | |
], | |
"author": "David Pascaud-Blandin", | |
"license": "ISC" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment