From c67082115853f36c43928e3b4053953e638f7a2a Mon Sep 17 00:00:00 2001 From: batdevis Date: Sun, 11 Jan 2015 23:26:01 +0000 Subject: [PATCH 1/5] gulp --- .bowerrc | 3 + .gitignore | 3 +- Gruntfile.js | 457 ----------------------- app/app.js | 5 +- app/assets/images/.gitkeep | 0 app/assets/images/test.png | Bin 0 -> 15118 bytes app/assets/styles/main.min.css | 1 + app/assets/styles/main.scss | 7 +- app/config/localization.config.js | 5 +- app/config/route.config.js | 5 +- app/constants/api.dev.const.js | 3 + app/constants/api.prod.const.js | 3 + app/constants/api.staging.const.js | 3 + app/index.html | 108 +++--- app/routes/welcome/welcome.controller.js | 3 + app/routes/welcome/welcome.route.js | 8 +- bower.json | 3 +- config.json | 5 + gulpfile.js | 283 ++++++++++++++ package.json | 57 ++- 20 files changed, 406 insertions(+), 556 deletions(-) create mode 100644 .bowerrc delete mode 100644 Gruntfile.js create mode 100644 app/assets/images/.gitkeep create mode 100644 app/assets/images/test.png create mode 100644 app/assets/styles/main.min.css create mode 100644 config.json create mode 100644 gulpfile.js diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..027fb5d --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "app/bower_components/" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index a22a458..410e2dd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules dist .tmp .sass-cache -bower_components +app/bower_components +build diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index ac20a46..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,457 +0,0 @@ -// Generated on 2014-09-27 using generator-angular 0.9.8 -'use strict'; - -// # Globbing -// for performance reasons we're only matching one level down: -// 'test/spec/{,*/}*.js' -// use this if you want to recursively match all subfolders: -// 'test/spec/**/*.js' - -module.exports = function (grunt) { - - // Load grunt tasks automatically - require('load-grunt-tasks')(grunt); - - // Time how long tasks take. Can help when optimizing build times - require('time-grunt')(grunt); - - // Configurable paths for the application - var appConfig = { - app: require('./bower.json').appPath || 'app', - dist: 'dist' - }; - - // Define the configuration for all the tasks - grunt.initConfig({ - - // Project settings - yeoman: appConfig, - - // Watches files for changes and runs tasks based on the changed files - watch: { - js: { - files: ['<%= yeoman.app %>/{,**/}*.js'], - tasks: ['newer:jshint:all'], - options: { - livereload: '<%= connect.options.livereload %>' - } - }, - jsTest: { - files: ['<%= yeoman.app %>/{,*/}*.spec.js'], - tasks: ['newer:jshint:test', 'karma'] - }, - compass: { - files: ['<%= yeoman.app %>/{,**/}*.{scss,sass}'], - tasks: ['compass:server', 'autoprefixer'] - }, - gruntfile: { - files: ['Gruntfile.js'] - }, - livereload: { - options: { - livereload: '<%= connect.options.livereload %>' - }, - files: [ - '<%= yeoman.app %>/{,**/}*.{html,lang.json}', - '.tmp/assets/styles/{,*/}*.css', - '<%= yeoman.app %>/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' - ] - } - }, - - // The actual grunt server settings - connect: { - options: { - port: 9000, - // Change this to '0.0.0.0' to access the server from outside. - hostname: '0.0.0.0', - livereload: 35729 - }, - livereload: { - options: { - open: false, - middleware: function (connect) { - return [ - connect.static('.tmp'), - connect().use( - '/bower_components', - connect.static('./bower_components') - ), - connect().use( - '/node_modules', - connect.static('./node_modules') - ), - connect.static(appConfig.app) - ]; - } - } - }, - test: { - options: { - port: 9001, - middleware: function (connect) { - return [ - connect.static('.tmp'), - connect.static('test'), - connect().use( - '/bower_components', - connect.static('./bower_components') - ), - connect.static(appConfig.app) - ]; - } - } - }, - dist: { - options: { - open: true, - base: '<%= yeoman.dist %>' - } - } - }, - - // Make sure code styles are up to par and there are no obvious mistakes - jshint: { - options: { - jshintrc: '.jshintrc', - reporter: require('jshint-stylish') - }, - all: { - src: [ - 'Gruntfile.js', - '<%= yeoman.app %>/{,*/}*.js' - ] - }, - test: { - options: { - jshintrc: '.jshintrc' - }, - src: ['<%= yeoman.app %>/{,*/}*.spec.js'] - } - }, - - // Empties folders to start fresh - clean: { - dist: { - files: [{ - dot: true, - src: [ - '.tmp', - '<%= yeoman.dist %>/{,*/}*', - '!<%= yeoman.dist %>/.git*' - ] - }] - }, - server: '.tmp' - }, - - // Add vendor prefixed styles - autoprefixer: { - options: { - browsers: ['last 1 version'] - }, - dist: { - files: [{ - expand: true, - cwd: '.tmp/assets/styles/', - src: '{,*/}*.css', - dest: '.tmp/assets/styles/' - }] - } - }, - - // Compiles Sass to CSS and generates necessary files if requested - compass: { - options: { - sassDir: '<%= yeoman.app %>/assets/styles', - cssDir: '.tmp/assets/styles', - generatedImagesDir: '.tmp/assets/images/generated', - imagesDir: '<%= yeoman.app %>/assets/images', - javascriptsDir: '<%= yeoman.app %>', - fontsDir: '<%= yeoman.app %>/assets/styles/fonts', - importPath: ['./bower_components', '<%= yeoman.app %>'], - httpImagesPath: '/assets/images', - httpGeneratedImagesPath: '/assets/images/generated', - httpFontsPath: '/assets/styles/fonts', - relativeAssets: false, - assetCacheBuster: false, - raw: 'Sass::Script::Number.precision = 10\n', - sourcemap: true - }, - dist: { - options: { - generatedImagesDir: '<%= yeoman.dist %>/assets/images/generated' - } - }, - server: { - options: { - debugInfo: false - } - } - }, - - // Renames files for browser caching purposes - filerev: { - dist: { - src: [ - '<%= yeoman.dist %>/{,*/}*.js', - '<%= yeoman.dist %>/assets/styles/{,*/}*.css', - '<%= yeoman.dist %>/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', - '<%= yeoman.dist %>/assets/styles/fonts/*' - ] - } - }, - - // Reads HTML for usemin blocks to enable smart builds that automatically - // concat, minify and revision files. Creates configurations in memory so - // additional tasks can operate on them - useminPrepare: { - html: '<%= yeoman.dist %>/index.html', - options: { - dest: '<%= yeoman.dist %>', - flow: { - html: { - steps: { - js: ['concat', 'uglifyjs'], - css: ['cssmin'] - }, - post: {} - } - } - } - }, - - // Performs rewrites based on filerev and the useminPrepare configuration - usemin: { - html: ['<%= yeoman.dist %>/{,*/}*.html'], - css: ['<%= yeoman.dist %>/assets/styles/{,*/}*.css'], - options: { - assetsDirs: ['<%= yeoman.dist %>','<%= yeoman.dist %>/images'] - } - }, - - // The following *-min tasks will produce minified files in the dist folder - // By default, your `index.html`'s will take care of - // minification. These next options are pre-configured if you do not wish - // to use the Usemin blocks. - // cssmin: { - // dist: { - // files: { - // '<%= yeoman.dist %>/styles/main.css': [ - // '.tmp/styles/{,*/}*.css' - // ] - // } - // } - // }, - // uglify: { - // dist: { - // files: { - // '<%= yeoman.dist %>/scripts/scripts.js': [ - // '<%= yeoman.dist %>/scripts/scripts.js' - // ] - // } - // } - // }, - // concat: { - // dist: {} - // }, - - imagemin: { - dist: { - files: [{ - expand: true, - cwd: '<%= yeoman.app %>/assets/images', - src: '{,*/}*.{png,jpg,jpeg,gif}', - dest: '<%= yeoman.dist %>/assets/images' - }] - } - }, - - svgmin: { - dist: { - files: [{ - expand: true, - cwd: '<%= yeoman.app %>/assets/images', - src: '{,*/}*.svg', - dest: '<%= yeoman.dist %>/assets/images' - }] - } - }, - - htmlmin: { - dist: { - options: { - collapseWhitespace: true, - conservativeCollapse: true, - collapseBooleanAttributes: true, - removeCommentsFromCDATA: true, - removeOptionalTags: true - }, - files: [{ - expand: true, - cwd: '<%= yeoman.dist %>', - src: ['*.html', 'components/{,*/}*.html', 'routes/{,*/}*.html'], - dest: '<%= yeoman.dist %>' - }] - } - }, - - // ng-annotate tries to make the code safe for minification automatically - // by using the Angular long form for dependency injection. - ngAnnotate: { - dist: { - files: [{ - expand: true, - cwd: '.tmp/concat/scripts', - src: ['*.js', '!oldieshim.js'], - dest: '.tmp/concat/scripts' - }] - } - }, - - // Replace Google CDN references - cdnify: { - dist: { - html: ['<%= yeoman.dist %>/*.html'] - } - }, - - // Copies remaining files to places other tasks can use - copy: { - dist: { - files: [{ - expand: true, - dot: true, - cwd: '<%= yeoman.app %>', - dest: '<%= yeoman.dist %>', - src: [ - '*.{ico,png,txt}', - '.htaccess', - 'components/{,*/}*.html', - 'routes/{,*/}*.html', - 'assets/images/{,*/}*.{webp}', - 'assets/fonts/*' - ] - }, { - expand: true, - cwd: '.tmp/assets/images', - dest: '<%= yeoman.dist %>/assets/images', - src: ['generated/*'] - }] - }, - styles: { - expand: true, - cwd: '<%= yeoman.app %>/assets/styles', - dest: '.tmp/assets/styles/', - src: '{,*/}*.css' - } - }, - - // Run some tasks in parallel to speed up the build process - concurrent: { - server: [ - 'compass:server' - ], - test: [ - 'compass' - ], - dist: [ - 'compass:dist', - 'imagemin', - 'svgmin' - ] - }, - - // Test settings - karma: { - unit: { - configFile: 'karma.conf.js', - singleRun: true - } - }, - - // Environment and preprocess - env: { - options: { - }, - dev: { - ENV: 'DEVELOPMENT' - }, - staging: { - ENV : 'STAGING' - }, - prod: { - ENV : 'PRODUCTION' - } - }, - preprocess: { - index: { - src: '<%= yeoman.app %>/index.html', - dest: '<%= yeoman.dist %>/index.html' - } - } - }); - - - grunt.registerTask('serve', 'Compile then start a connect web server', function (target) { - if (target === 'dist') { - return grunt.task.run(['build', 'connect:dist:keepalive']); - } - - grunt.task.run([ - 'env:dev', - 'clean:server', - 'concurrent:server', - 'autoprefixer', - 'connect:livereload', - 'watch' - ]); - }); - - grunt.registerTask('test', [ - 'env:dev', - 'clean:server', - 'concurrent:test', - 'autoprefixer', - 'connect:test', - 'karma' - ]); - - grunt.registerTask('build', [ - 'clean:dist', - 'preprocess', - 'useminPrepare', - 'concurrent:dist', - 'autoprefixer', - 'concat', - 'ngAnnotate', - 'copy:dist', - 'cdnify', - 'cssmin', - 'uglify', - 'filerev', - 'usemin', - 'htmlmin' - ]); - - grunt.registerTask('build:dev', [ - 'env:dev', - 'build' - ]); - - grunt.registerTask('build:staging', [ - 'env:staging', - 'build' - ]); - - grunt.registerTask('build:production', [ - 'env:prod', - 'build' - ]); - - grunt.registerTask('default', [ - 'newer:jshint', - 'test', - 'build' - ]); -}; diff --git a/app/app.js b/app/app.js index f504d58..c73e565 100644 --- a/app/app.js +++ b/app/app.js @@ -1,3 +1,4 @@ +(function () { 'use strict'; angular.module('webApp', [ @@ -7,5 +8,7 @@ angular.module('webApp', [ 'webApp.Config.Route', 'webApp.Config.Localization', // Routes - 'webApp.Route.Welcome', + 'webApp.Route.Welcome' ]); + +})(); \ No newline at end of file diff --git a/app/assets/images/.gitkeep b/app/assets/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/app/assets/images/test.png b/app/assets/images/test.png new file mode 100644 index 0000000000000000000000000000000000000000..4c55c9dbfd78f517efeb63c402b511a9bcaf0e11 GIT binary patch literal 15118 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 Xd4fuKjbkpr77%r1oeM?htwa7BkS8Q( literal 0 HcmV?d00001 diff --git a/app/assets/styles/main.min.css b/app/assets/styles/main.min.css new file mode 100644 index 0000000..e16eaab --- /dev/null +++ b/app/assets/styles/main.min.css @@ -0,0 +1 @@ +@import url(../../bower_components/normalize.css/normalize.css);.welcome-title{color:#666} \ No newline at end of file diff --git a/app/assets/styles/main.scss b/app/assets/styles/main.scss index ae9d9e0..7ca3d47 100644 --- a/app/assets/styles/main.scss +++ b/app/assets/styles/main.scss @@ -1,6 +1,7 @@ @charset "UTF-8"; -// bower:scss -// endbower +//bower:css +@import "../../bower_components/normalize.css/normalize.css"; +//endbower -@import "routes/welcome/welcome.style"; +@import "../../routes/welcome/welcome.style"; diff --git a/app/config/localization.config.js b/app/config/localization.config.js index cf7c78c..d2d6175 100644 --- a/app/config/localization.config.js +++ b/app/config/localization.config.js @@ -1,3 +1,4 @@ +(function () { 'use strict'; // ## Localization configuration @@ -6,7 +7,7 @@ angular.module('webApp.Config.Localization', [ 'ngCookies', 'ngLocalize.Config', 'ngLocalize.InstalledLanguages', - 'ngLocalize.Events', + 'ngLocalize.Events' ]) .value('localeConf', { @@ -27,3 +28,5 @@ angular.module('webApp.Config.Localization', [ 'en': 'en-US', 'it': 'it-IT', }); + +})(); \ No newline at end of file diff --git a/app/config/route.config.js b/app/config/route.config.js index f0330ec..094311e 100644 --- a/app/config/route.config.js +++ b/app/config/route.config.js @@ -1,7 +1,8 @@ +(function () { 'use strict'; angular.module('webApp.Config.Route', [ - 'ui.router', + 'ui.router' ]) .config(function ($locationProvider, $urlRouterProvider) { @@ -12,3 +13,5 @@ angular.module('webApp.Config.Route', [ $urlRouterProvider.otherwise('/'); }); + +})(); \ No newline at end of file diff --git a/app/constants/api.dev.const.js b/app/constants/api.dev.const.js index 24cd9fe..632e01c 100644 --- a/app/constants/api.dev.const.js +++ b/app/constants/api.dev.const.js @@ -1,6 +1,9 @@ +(function () { 'use strict'; angular.module('webApp.Const.Api', []) .constant('apiConst', { }); + +})(); \ No newline at end of file diff --git a/app/constants/api.prod.const.js b/app/constants/api.prod.const.js index 24cd9fe..632e01c 100644 --- a/app/constants/api.prod.const.js +++ b/app/constants/api.prod.const.js @@ -1,6 +1,9 @@ +(function () { 'use strict'; angular.module('webApp.Const.Api', []) .constant('apiConst', { }); + +})(); \ No newline at end of file diff --git a/app/constants/api.staging.const.js b/app/constants/api.staging.const.js index 24cd9fe..632e01c 100644 --- a/app/constants/api.staging.const.js +++ b/app/constants/api.staging.const.js @@ -1,6 +1,9 @@ +(function () { 'use strict'; angular.module('webApp.Const.Api', []) .constant('apiConst', { }); + +})(); \ No newline at end of file diff --git a/app/index.html b/app/index.html index f181f84..30cdb2b 100644 --- a/app/index.html +++ b/app/index.html @@ -1,66 +1,58 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + -

+
- - - + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/app/routes/welcome/welcome.controller.js b/app/routes/welcome/welcome.controller.js index f398f90..f7b1771 100644 --- a/app/routes/welcome/welcome.controller.js +++ b/app/routes/welcome/welcome.controller.js @@ -1,3 +1,4 @@ +(function () { 'use strict'; angular.module('webApp.Route.Welcome.Controller', []) @@ -6,3 +7,5 @@ angular.module('webApp.Route.Welcome.Controller', []) var ctrl = this; ctrl.list = ['one', 'two', 'three']; }); + +})(); \ No newline at end of file diff --git a/app/routes/welcome/welcome.route.js b/app/routes/welcome/welcome.route.js index 0de5617..e49922b 100644 --- a/app/routes/welcome/welcome.route.js +++ b/app/routes/welcome/welcome.route.js @@ -1,10 +1,10 @@ +(function () { 'use strict'; angular.module('webApp.Route.Welcome', [ 'ui.router', 'ngLocalize', - - 'webApp.Route.Welcome.Controller', + 'webApp.Route.Welcome.Controller' ]) .config(function ($stateProvider) { @@ -22,4 +22,6 @@ angular.module('webApp.Route.Welcome', [ }], }, }); -}); \ No newline at end of file +}); + +})(); \ No newline at end of file diff --git a/bower.json b/bower.json index 24fc289..6a29751 100644 --- a/bower.json +++ b/bower.json @@ -11,7 +11,8 @@ "angular-messages": "~1.3", "angular-cookies": "~1.3", "angular-localization": "~1.1.3", - "angular-ui-router": "~0.2.13" + "angular-ui-router": "~0.2.13", + "normalize.css": "~3.0.2" }, "devDependencies": { "angular-mocks": "~1.3", diff --git a/config.json b/config.json new file mode 100644 index 0000000..20c245c --- /dev/null +++ b/config.json @@ -0,0 +1,5 @@ +{ + "server": { + "port": 3110 + } +} diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..d529b5b --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,283 @@ +var gulp = require('gulp'), + rename = require("gulp-rename"), + csso = require('gulp-csso'), + sass = require('gulp-sass'), + rev = require('gulp-rev'), + minifyHTML = require('gulp-minify-html'), + wiredep = require('wiredep').stream, + connect = require('gulp-connect'), + uglify = require('gulp-uglify'), + concat = require('gulp-concat'), + stripDebug = require('gulp-strip-debug'), + size = require('gulp-size'), + jshint = require('gulp-jshint'), + browserSync = require('browser-sync'), + reload = browserSync.reload, + bower_files = require('bower-files')({dir: './app/bower_components'}) + htmlreplace = require('gulp-html-replace'), + karma = require('karma').server, + addsrc = require('gulp-add-src'), + clean = require('gulp-clean'); + +var CFG = require("./config.json"); + +var SRC = { + js: ['./app/**/*.js', '!./app/bower_components/**/*'], + scss: './app/assets/styles/main.scss', + html: './app/**/*.html' +}; + +var BUILD_DEST = "./build"; + +/******************************************* + * error handling + *******************************************/ +var plumber = require('gulp-plumber'); +var onError = function (err) { + console.log(err); +}; + +/******************************************* + * default + *******************************************/ +gulp.task('default', function() { + console.log(""); + console.log("========================================"); + console.log("usage:"); + console.log("----------------------------------------"); + console.log("gulp serve: start local development server"); + console.log("gulp build: prepare production pack in buil directory"); + console.log("gulp serve:build: start local production server"); + console.log("gulp test: run test once and exit"); + console.log("gulp tdd: watch for file changes and re-run tests on each change"); + console.log("========================================"); + console.log(""); +}); + +/******************************************* + * build + *******************************************/ + +gulp.task('build:clean', function () { + gulp.src(BUILD_DEST + '/**/*.*', { read: false }) + .pipe(clean()); +}); + +gulp.task('build:strings', function() { + gulp.src('./app/assets/strings/**/*.json') + .pipe(plumber({ errorHandler: onError })) + .pipe(gulp.dest(BUILD_DEST + '/assets/strings')); +}); + +gulp.task('build:files', [ + 'build:scripts', + 'build:strings', + 'build:styles', + 'build:images', + 'build:html' +]); + +gulp.task('build', [ + 'build:clean', + 'build:files' +], function() { + console.log('built on ' + BUILD_DEST); +}); + +gulp.task('serve:build', ['build'], function(){ + browserSync({ + server: { + baseDir: BUILD_DEST + }, + port: browserSyncConfig.port + }); +}); + +/******************************************* + * development + *******************************************/ + +gulp.task('dev:clean', function () { + gulp.src('./tmp/**/*.*', { read: false }) + .pipe(clean()); +}); + +gulp.task('watch', function() { + gulp.watch([SRC.scss, SRC.js, SRC.html], function(event){ + return gulp.src(event.path) + .pipe(reload({ stream: true })); + }); + gulp.watch(SRC.scss, ['dev:styles']); + gulp.watch(SRC.js, ['jshint']); + gulp.watch('bower.json', ['bower']); +}); + +var browserSyncConfig = { + server: { + baseDir: "./app", + }, + port: 3110 + /* + routes: { + "/bower_components": "../bower_components" + } + */ + }; + +gulp.task('browser-sync', function() { + browserSync(browserSyncConfig); +}); + +gulp.task('serve', [ + 'dev:clean', + 'bower', + 'dev:styles', + 'jshint', + 'watch', + 'browser-sync' +]); + +/******************************************* + * bower components + *******************************************/ + +gulp.task('bower:html', function () { + return gulp.src('./app/index.html') + .pipe(plumber({ errorHandler: onError })) + .pipe(wiredep({ + directory: './app/bower_components', + exclude: [ + 'bower_components/es5-shim/es5-shim.js', + 'bower_components/json3/lib/json3.js' + ] + })) + .pipe(gulp.dest('./app')); +}); + +gulp.task('bower:css', function () { + return gulp.src(SRC.scss) + .pipe(plumber({ errorHandler: onError })) + .pipe(wiredep({ + directory: './app/bower_components' + })) + .pipe(gulp.dest('./app/assets/styles')); +}); + +gulp.task('bower', ['bower:html', 'bower:css']); + +/******************************************* + * scripts + *******************************************/ + +gulp.task('build:scripts', ['build:scripts:application', 'build:scripts:vendor']); + +gulp.task('build:scripts:application', function() { + gulp.src(SRC.js) + .pipe(plumber({ errorHandler: onError })) + .pipe(jshint()) + .pipe(jshint.reporter('jshint-stylish')) + .pipe(stripDebug()) + .pipe(concat('main.js')) +//bd .pipe(uglify()) + .pipe(rename({suffix: '.min'})) + .pipe(size()) + .pipe(gulp.dest(BUILD_DEST + '/assets')); +}); + +gulp.task('build:scripts:vendor', function() { + gulp.src(bower_files.js) + .pipe(plumber({ errorHandler: onError })) + .pipe(concat('vendor.js')) + .pipe(uglify()) + .pipe(rename({suffix: '.min'})) + .pipe(size()) + .pipe(gulp.dest(BUILD_DEST + '/assets')); +}); + +gulp.task('jshint', function() { + gulp.src(SRC.js) + .pipe(plumber({ errorHandler: onError })) + .pipe(jshint()) + .pipe(jshint.reporter('jshint-stylish')) +}); + +/******************************************* + * styles + *******************************************/ + +gulp.task('build:styles', function() { + gulp.src(SRC.scss) + .pipe(plumber({ errorHandler: onError })) + .pipe(sass()) + .pipe(concat('main.css')) + .pipe(csso()) + .pipe(rename({suffix: '.min'})) + .pipe(size()) + .pipe(gulp.dest(BUILD_DEST + '/assets')); +}); + +gulp.task('dev:styles', function() { + gulp.src(SRC.scss) + .pipe(plumber({ errorHandler: onError })) + .pipe(sass()) + .pipe(concat('main.css')) + .pipe(csso()) + .pipe(rename({suffix: '.min'})) + .pipe(size()) + .pipe(gulp.dest('./app/assets/styles')); +}); + +gulp.task('sass', function () { + gulp.src(SRC.scss) + .pipe(plumber({ errorHandler: onError })) + .pipe(sass()) + .pipe(gulp.dest('./.tmp/app/assets/styles')); +}); + +/******************************************* + * html + *******************************************/ + +gulp.task('build:html', function () { + return gulp.src(SRC.html) + .pipe(plumber({ errorHandler: onError })) + .pipe(htmlreplace({ + 'css': '/assets/main.min.css', + 'js': '/assets/main.min.js', + 'vendorjs': '/assets/vendor.min.js', + 'oldieshimjs': '/assets/oldieshim.min.js' + })) +//bd .pipe(minifyHTML()) + .pipe(size()) + .pipe(gulp.dest(BUILD_DEST)); +}); + + +/******************************************* + * images + *******************************************/ + +gulp.task('build:images', function () { + return gulp.src('./app/assets/images/**/*') + .pipe(plumber({ errorHandler: onError })) + .pipe(gulp.dest(BUILD_DEST + "/assets")); +}); + +/******************************************* + * test + *******************************************/ + +//Run test once and exit +gulp.task('test', function (done) { + karma.start({ + configFile: __dirname + '/karma.conf.js', + singleRun: true + }, done); +}); + +//Watch for file changes and re-run tests on each change +gulp.task('tdd', function (done) { + karma.start({ + configFile: __dirname + '/karma.conf.js' + }, done); +}); \ No newline at end of file diff --git a/package.json b/package.json index bc6cf3b..3b3f29b 100644 --- a/package.json +++ b/package.json @@ -1,48 +1,45 @@ { "name": "webapp", "version": "0.0.0", - "dependencies": {}, + "dependencies": { + "gulp": "^3.8.10" + }, "devDependencies": { "angular-hint": "0.0.0", - "grunt": "^0.4.1", - "grunt-autoprefixer": "^0.7.3", - "grunt-concurrent": "^0.5.0", - "grunt-contrib-clean": "^0.5.0", - "grunt-contrib-compass": "^1.0.1", - "grunt-contrib-concat": "^0.4.0", - "grunt-contrib-connect": "^0.7.1", - "grunt-contrib-copy": "^0.5.0", - "grunt-contrib-cssmin": "^0.9.0", - "grunt-contrib-htmlmin": "^0.3.0", - "grunt-contrib-imagemin": "^0.8.1", - "grunt-contrib-jshint": "^0.10.0", - "grunt-contrib-uglify": "^0.4.0", - "grunt-contrib-watch": "^0.6.1", - "grunt-env": "^0.4.2", - "grunt-filerev": "^0.2.1", - "grunt-google-cdn": "^0.4.0", - "grunt-karma": "^0.9.0", - "grunt-newer": "^0.7.0", - "grunt-ng-annotate": "^0.3.0", - "grunt-preprocess": "^4.0.0", - "grunt-react": "^0.9.0", - "grunt-svgmin": "^0.4.0", - "grunt-usemin": "^2.1.1", - "grunt-wiredep": "^1.7.0", - "jshint-stylish": "^0.2.0", + "bower-files": "^2.2.1", + "browser-sync": "^1.8.3", + "del": "^1.1.1", + "gulp": "^3.8.10", + "gulp-add-src": "^0.2.0", + "gulp-clean": "^0.3.1", + "gulp-concat": "^2.4.3", + "gulp-connect": "^2.2.0", + "gulp-csso": "^0.2.9", + "gulp-html-replace": "^1.4.1", + "gulp-jshint": "^1.9.0", + "gulp-minify-html": "^0.1.8", + "gulp-plumber": "^0.6.6", + "gulp-rename": "^1.2.0", + "gulp-rev": "^2.0.1", + "gulp-sass": "^1.2.4", + "gulp-size": "^1.1.0", + "gulp-strip-debug": "^1.0.2", + "gulp-uglify": "^1.0.2", + "gulp-usemin": "^0.3.8", + "jshint-stylish": "^1.0.0", "karma": "^0.12.24", "karma-chai": "^0.1.0", "karma-mocha": "^0.1.9", "karma-phantomjs-launcher": "^0.1.4", "karma-sinon": "^1.0.3", - "load-grunt-tasks": "^0.4.0", "sinon": "^1.10.3", - "time-grunt": "^0.3.1" + "wiredep": "^2.2.2" }, "engines": { "node": ">=0.10.0" }, "scripts": { - "test": "grunt test" + "test": "gulp test", + "start": "gulp serve" } } From 54fb2dfbd52bf5070addbd3adcda75905848f4ae Mon Sep 17 00:00:00 2001 From: batdevis Date: Sun, 11 Jan 2015 23:38:28 +0000 Subject: [PATCH 2/5] inject --- app/config/route.config.js | 6 ++++-- app/routes/welcome/welcome.controller.js | 7 +++++-- app/routes/welcome/welcome.route.js | 7 +++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/config/route.config.js b/app/config/route.config.js index 094311e..9438317 100644 --- a/app/config/route.config.js +++ b/app/config/route.config.js @@ -4,14 +4,16 @@ angular.module('webApp.Config.Route', [ 'ui.router' ]) +.config(config); -.config(function ($locationProvider, $urlRouterProvider) { +config.$inject = ['$locationProvider', '$urlRouterProvider']; +function config($locationProvider, $urlRouterProvider) { $locationProvider.html5Mode({ enabled: true, requireBase: true }).hashPrefix('!'); $urlRouterProvider.otherwise('/'); -}); +} })(); \ No newline at end of file diff --git a/app/routes/welcome/welcome.controller.js b/app/routes/welcome/welcome.controller.js index f7b1771..b0de0b5 100644 --- a/app/routes/welcome/welcome.controller.js +++ b/app/routes/welcome/welcome.controller.js @@ -3,9 +3,12 @@ angular.module('webApp.Route.Welcome.Controller', []) -.controller('WelcomeController', function () { +.controller('WelcomeController', WelcomeController); + +WelcomeController.$inject = []; +function WelcomeController() { var ctrl = this; ctrl.list = ['one', 'two', 'three']; -}); +} })(); \ No newline at end of file diff --git a/app/routes/welcome/welcome.route.js b/app/routes/welcome/welcome.route.js index e49922b..c4c08d3 100644 --- a/app/routes/welcome/welcome.route.js +++ b/app/routes/welcome/welcome.route.js @@ -7,7 +7,10 @@ angular.module('webApp.Route.Welcome', [ 'webApp.Route.Welcome.Controller' ]) -.config(function ($stateProvider) { +.config(config); + +config.$inject(['$stateProvider']); +function config($stateProvider) { $stateProvider.state('welcome', { url: '/', templateUrl: 'routes/welcome/welcome.template.html', @@ -22,6 +25,6 @@ angular.module('webApp.Route.Welcome', [ }], }, }); -}); +}; })(); \ No newline at end of file From 75f31f5ae50f811cadd9aa7864f4013902c4255f Mon Sep 17 00:00:00 2001 From: batdevis Date: Mon, 12 Jan 2015 01:33:03 +0000 Subject: [PATCH 3/5] gulp fix --- app/assets/styles/main.min.css | 2 +- app/assets/styles/main.scss | 6 +---- app/index.html | 7 ++++++ app/routes/welcome/welcome.route.js | 4 ++-- gulpfile.js | 37 ++++++++++++++++++----------- 5 files changed, 34 insertions(+), 22 deletions(-) diff --git a/app/assets/styles/main.min.css b/app/assets/styles/main.min.css index e16eaab..4a71cc4 100644 --- a/app/assets/styles/main.min.css +++ b/app/assets/styles/main.min.css @@ -1 +1 @@ -@import url(../../bower_components/normalize.css/normalize.css);.welcome-title{color:#666} \ No newline at end of file +.welcome-title{color:#666} \ No newline at end of file diff --git a/app/assets/styles/main.scss b/app/assets/styles/main.scss index 7ca3d47..4d6ed1d 100644 --- a/app/assets/styles/main.scss +++ b/app/assets/styles/main.scss @@ -1,7 +1,3 @@ @charset "UTF-8"; -//bower:css -@import "../../bower_components/normalize.css/normalize.css"; -//endbower - -@import "../../routes/welcome/welcome.style"; +@import "../../routes/welcome/welcome.style"; \ No newline at end of file diff --git a/app/index.html b/app/index.html index 30cdb2b..cf5c495 100644 --- a/app/index.html +++ b/app/index.html @@ -6,6 +6,13 @@ + + + + + + + diff --git a/app/routes/welcome/welcome.route.js b/app/routes/welcome/welcome.route.js index c4c08d3..8d39646 100644 --- a/app/routes/welcome/welcome.route.js +++ b/app/routes/welcome/welcome.route.js @@ -9,7 +9,7 @@ angular.module('webApp.Route.Welcome', [ .config(config); -config.$inject(['$stateProvider']); +config.$inject = ['$stateProvider']; function config($stateProvider) { $stateProvider.state('welcome', { url: '/', @@ -25,6 +25,6 @@ function config($stateProvider) { }], }, }); -}; +} })(); \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index d529b5b..db1b290 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -16,7 +16,6 @@ var gulp = require('gulp'), bower_files = require('bower-files')({dir: './app/bower_components'}) htmlreplace = require('gulp-html-replace'), karma = require('karma').server, - addsrc = require('gulp-add-src'), clean = require('gulp-clean'); var CFG = require("./config.json"); @@ -69,18 +68,15 @@ gulp.task('build:strings', function() { .pipe(gulp.dest(BUILD_DEST + '/assets/strings')); }); -gulp.task('build:files', [ - 'build:scripts', - 'build:strings', - 'build:styles', - 'build:images', - 'build:html' -]); - gulp.task('build', [ - 'build:clean', - 'build:files' -], function() { + 'build:clean', + 'bower', + 'build:scripts', + 'build:strings', + 'build:styles', + 'build:images', + 'build:html' + ], function() { console.log('built on ' + BUILD_DEST); }); @@ -205,7 +201,9 @@ gulp.task('jshint', function() { * styles *******************************************/ -gulp.task('build:styles', function() { +gulp.task('build:styles', ['build:styles:application', 'build:styles:vendor']); + +gulp.task('build:styles:application', function() { gulp.src(SRC.scss) .pipe(plumber({ errorHandler: onError })) .pipe(sass()) @@ -216,6 +214,17 @@ gulp.task('build:styles', function() { .pipe(gulp.dest(BUILD_DEST + '/assets')); }); +gulp.task('build:styles:vendor', function() { + gulp.src(bower_files.css) + .pipe(plumber({ errorHandler: onError })) + .pipe(sass()) + .pipe(concat('vendor.css')) + .pipe(csso()) + .pipe(rename({suffix: '.min'})) + .pipe(size()) + .pipe(gulp.dest(BUILD_DEST + '/assets')); +}); + gulp.task('dev:styles', function() { gulp.src(SRC.scss) .pipe(plumber({ errorHandler: onError })) @@ -243,6 +252,7 @@ gulp.task('build:html', function () { .pipe(plumber({ errorHandler: onError })) .pipe(htmlreplace({ 'css': '/assets/main.min.css', + 'vendorcss': '/assets/vendor.min.css', 'js': '/assets/main.min.js', 'vendorjs': '/assets/vendor.min.js', 'oldieshimjs': '/assets/oldieshim.min.js' @@ -252,7 +262,6 @@ gulp.task('build:html', function () { .pipe(gulp.dest(BUILD_DEST)); }); - /******************************************* * images *******************************************/ From 2c82e2bac2f00455597eb1b8b6bdaddcd46f7956 Mon Sep 17 00:00:00 2001 From: batdevis Date: Mon, 12 Jan 2015 01:43:21 +0000 Subject: [PATCH 4/5] remove debug --- gulpfile.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index db1b290..8c32f00 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -174,7 +174,7 @@ gulp.task('build:scripts:application', function() { .pipe(jshint.reporter('jshint-stylish')) .pipe(stripDebug()) .pipe(concat('main.js')) -//bd .pipe(uglify()) + .pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(size()) .pipe(gulp.dest(BUILD_DEST + '/assets')); @@ -257,7 +257,7 @@ gulp.task('build:html', function () { 'vendorjs': '/assets/vendor.min.js', 'oldieshimjs': '/assets/oldieshim.min.js' })) -//bd .pipe(minifyHTML()) + .pipe(minifyHTML()) .pipe(size()) .pipe(gulp.dest(BUILD_DEST)); }); From 10bb3eb34c9480550b71cedda3fb720c0202cdf2 Mon Sep 17 00:00:00 2001 From: batdevis Date: Tue, 13 Jan 2015 20:09:05 +0000 Subject: [PATCH 5/5] port cfg --- app/index.html | 4 ++-- config.json | 2 +- gulpfile.js | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/index.html b/app/index.html index cf5c495..89c24b1 100644 --- a/app/index.html +++ b/app/index.html @@ -6,13 +6,13 @@ - + - + diff --git a/config.json b/config.json index 20c245c..4526c49 100644 --- a/config.json +++ b/config.json @@ -1,5 +1,5 @@ { "server": { - "port": 3110 + "port": 3120 } } diff --git a/gulpfile.js b/gulpfile.js index 8c32f00..963eb48 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -21,7 +21,12 @@ var gulp = require('gulp'), var CFG = require("./config.json"); var SRC = { - js: ['./app/**/*.js', '!./app/bower_components/**/*'], + js: [ + './app/**/*.js', + '!./app/bower_components/**/*', + '!*.spec.js', + '!*.e2e.js' + ], scss: './app/assets/styles/main.scss', html: './app/**/*.html' }; @@ -112,12 +117,7 @@ var browserSyncConfig = { server: { baseDir: "./app", }, - port: 3110 - /* - routes: { - "/bower_components": "../bower_components" - } - */ + port: CFG.server.port }; gulp.task('browser-sync', function() {