Created
May 4, 2017 14:46
-
-
Save orafaelfragoso/9c23c367f9462386b113959545677817 to your computer and use it in GitHub Desktop.
Angular 1.X + Gulp
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
| 'use strict'; | |
| var gulp = require('gulp'), | |
| path = require('path'), | |
| del = require('del'), | |
| concat = require('gulp-concat'), | |
| uglify = require('gulp-uglify'), | |
| sass = require('gulp-sass'), | |
| eslint = require('gulp-eslint'), | |
| cssimport = require('gulp-cssimport'), | |
| gulpif = require('gulp-if'), | |
| gzip = require('gulp-gzip'), | |
| htmlmin = require('gulp-htmlmin'), | |
| cleanCss = require('gulp-clean-css'), | |
| sourcemaps = require('gulp-sourcemaps'), | |
| autoprefixer = require('gulp-autoprefixer'), | |
| runSequence = require('run-sequence'), | |
| ngAnnotate = require('gulp-ng-annotate'), | |
| templateCache = require('gulp-templatecache'), | |
| browserSync = require('browser-sync').create(), | |
| spa = require('browser-sync-spa'), | |
| uncss = require('gulp-uncss'), | |
| imagemin = require('gulp-imagemin'); | |
| var reload = browserSync.reload; | |
| var config = { | |
| sourceDir: './src/', | |
| buildDir: './dist/', | |
| serverDir: './.tmp/', | |
| ngApp: '[oiPosApp]', | |
| ngTemplates: 'oiPosApp.templates', | |
| browserPort: 3000, | |
| UIPort: 3001, | |
| fonts: { | |
| src: 'src/assets/fonts/**/*', | |
| dest: 'dist/assets/fonts', | |
| destServer: '.tmp/assets/fonts' | |
| }, | |
| images: { | |
| src: 'src/assets/images/**/*', | |
| favicon: 'src/favicon.ico', | |
| dest: 'dist/assets/images', | |
| destServer: '.tmp/assets/images' | |
| }, | |
| scripts: { | |
| src: 'src/**/*.js', | |
| files: 'src/**/*.js', | |
| dest: 'dist/assets/js', | |
| destServer: '.tmp/assets/js' | |
| }, | |
| styles: { | |
| src: 'src/assets/sass/style.sass', | |
| files: 'src/assets/sass/**/*.sass', | |
| dest: 'dist/assets/css', | |
| destServer: '.tmp/assets/css' | |
| }, | |
| templates: { | |
| src: 'src/components/**/*.html', | |
| files: 'src/**/*.html', | |
| index: 'src/index.html', | |
| dest: 'dist/assets/js', | |
| destServer: '.tmp/assets/js' | |
| }, | |
| gzip: { | |
| src: 'dist/**/*.{html,xml,json,css,js,js.map,css.map,svg}', | |
| dest: 'dist/', | |
| options: {} | |
| }, | |
| vendors: [ | |
| './node_modules/angular/angular.js', | |
| './node_modules/angular-ui-router/release/angular-ui-router.js' | |
| ], | |
| files: [ | |
| 'src/app.js', | |
| 'src/services/**/*.js', | |
| 'src/components/**/*.js' | |
| ] | |
| }; | |
| gulp.task('del', function() { | |
| return del(global.isProd ? config.buildDir : config.serverDir); | |
| }); | |
| gulp.task('styles', function () { | |
| return gulp.src(config.styles.src) | |
| .pipe(sourcemaps.init()) | |
| .pipe(sass({ | |
| importer: require('npm-sass').importer | |
| }).on('error', sass.logError)) | |
| .pipe(cssimport({includePaths: ['node_modules']})) | |
| .pipe(autoprefixer({ | |
| browsers: ['last 2 versions'], | |
| cascade: false | |
| })) | |
| .pipe(gulpif(global.isProd, cleanCss())) | |
| .pipe(sourcemaps.write('.')) | |
| .pipe(gulp.dest(global.isProd ? config.styles.dest : config.styles.destServer)) | |
| .pipe(reload({stream: true})); | |
| }); | |
| gulp.task('images', function () { | |
| return gulp.src(config.images.src) | |
| .pipe(imagemin([], { | |
| verbose: true | |
| })) | |
| .pipe(gulp.dest(global.isProd ? config.images.dest : config.images.destServer)); | |
| }); | |
| gulp.task('favicon', function () { | |
| return gulp.src(config.images.favicon) | |
| .pipe(gulp.dest(global.isProd ? config.buildDir : config.serverDir)); | |
| }); | |
| gulp.task('fonts', function() { | |
| return gulp.src(config.fonts.src) | |
| .pipe(gulp.dest(global.isProd ? config.fonts.dest : config.fonts.destServer)); | |
| }); | |
| gulp.task('lint', function() { | |
| return gulp.src(config.scripts.files) | |
| .pipe(eslint()) | |
| .pipe(eslint.format()); | |
| }); | |
| gulp.task('templates', function() { | |
| var options = { | |
| output: 'templates.js', | |
| stripFromPath: '', | |
| prependToPath: '', | |
| moduleName: config.ngTemplates, | |
| minify: global.isProd ? {collapseWhitespace: true, minifyCSS: true} : false | |
| }; | |
| return gulp.src(config.templates.src) | |
| .pipe(sourcemaps.init()) | |
| .pipe(templateCache(options)) | |
| .pipe(sourcemaps.write('.')) | |
| .pipe(gulp.dest(global.isProd ? config.templates.dest : config.templates.destServer)) | |
| .pipe(reload({stream: true})); | |
| }); | |
| gulp.task('vendors', function() { | |
| return gulp.src(config.vendors) | |
| .pipe(sourcemaps.init()) | |
| .pipe(concat('vendors.js')) | |
| .pipe(gulpif(global.isProd, uglify())) | |
| .pipe(sourcemaps.write('.')) | |
| .pipe(gulp.dest(global.isProd ? config.scripts.dest : config.scripts.destServer)); | |
| }); | |
| gulp.task('scripts', ['lint'], function() { | |
| return gulp.src(config.files) | |
| .pipe(sourcemaps.init()) | |
| .pipe(concat('bundle.js')) | |
| .pipe(ngAnnotate()) | |
| .pipe(gulpif(global.isProd, uglify())) | |
| .pipe(sourcemaps.write('.')) | |
| .pipe(gulp.dest(global.isProd ? config.scripts.dest : config.scripts.destServer)) | |
| .pipe(reload({stream: true})); | |
| }); | |
| gulp.task('html', function() { | |
| return gulp.src(config.templates.index) | |
| .pipe(gulpif(global.isProd, htmlmin({collapseWhitespace: true, minifyCSS: true}))) | |
| .pipe(gulp.dest(global.isProd ? config.buildDir : config.serverDir)) | |
| .pipe(reload({stream: true})); | |
| }); | |
| gulp.task('gzip', function () { | |
| return gulp.src(config.gzip.src) | |
| .pipe(gzip(config.gzip.options)) | |
| .pipe(gulp.dest(config.gzip.dest)); | |
| }); | |
| gulp.task('serve', function () { | |
| browserSync.use( | |
| spa({ | |
| selector: config.ngApp, | |
| history: { | |
| index: '/index.html' | |
| } | |
| }) | |
| ); | |
| browserSync.init({ | |
| server: { | |
| baseDir: global.isProd ? config.buildDir : config.serverDir, | |
| port: config.browserPort, | |
| ui: { | |
| port: config.UIPort | |
| }, | |
| ghostMode: false, | |
| open: false | |
| } | |
| }); | |
| gulp.watch(config.styles.files, ['styles']); | |
| gulp.watch(config.scripts.files, ['scripts']); | |
| gulp.watch(config.templates.files, ['templates', 'html']); | |
| }); | |
| gulp.task('serve:dev', function(cb) { | |
| global.isProd = false; | |
| runSequence('build:dev', 'serve', cb); | |
| }); | |
| gulp.task('serve:prod', function(cb) { | |
| global.isProd = true; | |
| runSequence('build:prod', 'serve', cb); | |
| }); | |
| gulp.task('build:dev', function(cb) { | |
| global.isProd = false; | |
| runSequence('del', ['html', 'styles', 'images', 'favicon', 'scripts', 'vendors', 'templates', 'fonts'], cb); | |
| }); | |
| gulp.task('build:prod', function(cb) { | |
| global.isProd = true; | |
| runSequence('del', ['html', 'styles', 'images', 'favicon', 'scripts', 'vendors', 'templates', 'fonts'], 'gzip', cb); | |
| }); | |
| gulp.task('default', ['serve:dev']); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment