UNPKG

cobuild-angular-stack

Version:

Base stack angular sass jade gulp

514 lines (461 loc) 18.6 kB
'use strict'; /** * Dependencies */ var gulp = require('gulp') , gutil = require('gulp-util') , notify = require('gulp-notify') , plumber = require('gulp-plumber') , rename = require('gulp-rename') , minifyCSS = require('gulp-minify-css') , header = require('gulp-header') , size = require('gulp-size') , connect = require('gulp-connect') , watch = require('gulp-watch') , htmlmin = require('gulp-htmlmin') , concat = require('gulp-concat') , uglify = require('gulp-uglify') , less = require('gulp-less') , imagemin = require('gulp-imagemin') , pkg = require('./package.json') , replace = require('gulp-replace') , bower = require('gulp-bower') , flatten = require('gulp-flatten') , clean = require('gulp-clean') , argv = require('yargs').argv; // , LessAutoprefix = require('less-plugin-autoprefix'); //var autoprefix = new LessAutoprefix({ browsers: ['last 2 versions'] }); var gulpConfig = require('./gulp_config'); var vendors = gulpConfig.vendors; var vendorJs = vendors.vendorJs; var vendorCss = vendors.vendorCss; var vendorJs_admin = vendors.vendorJs_admin; var vendorCss_admin = vendors.vendorCss_admin; var currentTime = Date.now(); var fileTypeReg = /\.(gif|jpeg|jpg|png)"/ig; var env = { isProduction: process.env.NODE_ENV === 'production', isStaging: process.env.NODE_ENV === 'staging', isDevelopment: process.env.NODE_ENV === 'development', isLocal: process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'staging' && process.env.NODE_ENV !== 'development' }; var destBasePath = './public/'; if (env.isProduction) { destBasePath = './production/' } else if (env.isStaging) { destBasePath = './staging/' } /** * Config files */ var banner = [ '/*', ' * <%= pkg.name %> - <%= pkg.description %>', ' * @version v<%= pkg.version %>', ' * @link <%= pkg.homepage %>', ' * @license <%= pkg.license %>', ' */', '' ].join('\n'); function onError(err) { gutil.beep(); console.log(err); console.log('*****MESSAGE*****'); console.log(err.message); } var paths = { webserverRoot: env.isStaging ? './staging' : env.isProduction ? './production' : './public', index: destBasePath + 'index.html', favicon: ['./assets/favicon.ico', './assets/favicon-32x32.png', './assets/favicon-16x16.png'], onRoot: ['./assets/googleb29740f74d062747.html'], htmlIndex: ['./assets/index.html'], copy: ['./bower_components/zeroclipboard/dist/**/*.swf'], copyDocs: ['./assets/raws/*', './assets/raws/**/*'], html: ['./assets/**/*.html', './app/**/*.html', './modules/**/*.html'], scripts: ['./app/app.module.js', './assets/js/*.js', './assets/js/**/*.js', './modules/**/*.js', './app/**/**/*.js', '!./assets/raws', '!./assets/raws/**/*'], vendorCss: vendorCss, vendorCss_admin: vendorCss_admin, vendorJs_admin: vendorJs_admin, less_admin: ['./modules/**/*.less', './assets/**/*.less', '!./assets/**/loading-bar.less', '!./modules/**/kitchen.less'], less: ['./modules/**/*.less', './assets/**/*.less', '!./assets/**/loading-bar-admin.less'], vendorJs: vendorJs, images: './assets/img/**/*', fonts: ['./bower_components/**/*.eot', './bower_components/**/*.ttf', './bower_components/**/*.woff', './bower_components/**/*.woff2'] }; /** * Tasks */ // WebServer gulp.task('webserver', function () { gutil.log('Local front-end server started'); require('./app.js'); /*connect.server({ port: 4000, livereload: true, root: [paths.webserverRoot], host: 'localhost' });*/ }); // HTML minify gulp.task('index', function () { var currentPipe = gulp.src(paths.htmlIndex) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})); if (env.isProduction || env.isStaging) { currentPipe = currentPipe.pipe(htmlmin({collapseWhitespace: true})); } var postReplace; if (env.isStaging) { postReplace = currentPipe .pipe(replace('http://front.uniko.co', 'https://stg.uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '1751608348461372')); } else if (env.isProduction) { postReplace = currentPipe .pipe(replace('http://front.uniko.co', 'https://uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '1587795838180061')); } else if (env.isDevelopment) { postReplace = currentPipe .pipe(replace('http://front.uniko.co', 'https://dev.uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '258129971226453')); } else { console.log("1111111"); postReplace = currentPipe .pipe(replace('http://front.uniko.co', 'https://localhost:4000')) .pipe(replace('$$UnikofbApiKey$$', '1754003701505581')); } if (!env.isLocal) { postReplace = postReplace .pipe(replace(/<script\s*src="js\/vendor\.js"\s*><\/script>/, '')) .pipe(replace(/<script\s*src="js\/vendor_admin\.js"\s*><\/script>/, '')) .pipe(replace('vendor.css', 'vendor' + currentTime + '.css')) .pipe(replace('vendor_admin.css', 'vendor_admin' + currentTime + '.css')) .pipe(replace(/<script\s*src="js\/built\.js"\s*><\/script>/, '<script src="js/build.min.js?timestamp=' + currentTime + '"></script>')) .pipe(replace('main.css', 'main' + currentTime + '.css')) .pipe(replace('main_admin.css', 'main_admin' + currentTime + '.css')); } else { currentTime = Date.now(); postReplace = postReplace .pipe(replace('vendor.js', 'vendor.js?timestamp=' + currentTime)) .pipe(replace('vendor_admin.js', 'vendor_admin.js?timestamp=' + currentTime)) .pipe(replace('vendor.css', 'vendor.css?timestamp=' + currentTime)) .pipe(replace('vendor_admin.css', 'vendor_admin.css?timestamp=' + currentTime)) .pipe(replace('built.js', 'built.js?timestamp=' + currentTime)) .pipe(replace('main.css', 'main.css?timestamp=' + currentTime)) .pipe(replace('main_admin.css', 'main_admin.css?timestamp=' + currentTime)); } postReplace .pipe(replace(fileTypeReg, '.$1?timestamp=' + currentTime + '"')) .pipe(gulp.dest(destBasePath)); }); gulp.task('copy', function () { gulp.src(paths.copy) .pipe(gulp.dest(destBasePath + 'swf/')); }); gulp.task('copyRoot', function () { gulp.src(paths.onRoot) .pipe(gulp.dest(destBasePath + '/')); }); gulp.task('favicon', function () { gulp.src(paths.favicon) .pipe(gulp.dest(destBasePath + '/')); }); gulp.task('copyDocs', function () { gulp.src(paths.copyDocs) .pipe(gulp.dest(destBasePath + 'raw/')); }); // HTML minify gulp.task('html', function () { var currentPipe = gulp.src(paths.html) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})); if (env.isProduction || env.isStaging) { currentPipe = currentPipe.pipe(htmlmin({collapseWhitespace: true})) } var postReplace; if (env.isStaging) { postReplace = currentPipe .pipe(replace('http://front.uniko.co', 'https://stg.uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '1751608348461372')); } else if (env.isProduction) { postReplace = currentPipe .pipe(replace('http://front.uniko.co', 'https://uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '1587795838180061')); } else if (env.isDevelopment) { postReplace = currentPipe .pipe(replace('http://front.uniko.co', 'https://dev.uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '258129971226453')); } else { console.log("111111122222"); postReplace = currentPipe .pipe(replace('http://front.uniko.co', 'https://localhost:4000')) .pipe(replace('$$UnikofbApiKey$$', '1754003701505581')); } postReplace .pipe(replace(fileTypeReg, '.$1?timestamp=' + currentTime + '"')) .pipe(rename({dirname: 'partials'})) .pipe(gulp.dest(destBasePath)); }); // Concat app scripts gulp.task('vendorJs', function (cb) { gulp.src(paths.vendorJs) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})) .pipe(concat('vendor.js')) .pipe(header(banner, {pkg: pkg})) .pipe(size({title: 'vendor.js'})) .pipe(gulp.dest(destBasePath + 'js/')) .pipe(uglify()) .pipe(size({title: 'vendor.min.js'})) .pipe(rename('vendor.min.js')) .pipe(gulp.dest(destBasePath + 'js/')) .on('end', cb); }); // Concat app scripts gulp.task('vendorCss', function () { var stream = gulp.src(paths.vendorCss) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})) .pipe(concat('vendor.css')) .pipe(header(banner, {pkg: pkg})) .pipe(size({title: 'vendor.css'})); if (!env.isLocal) { stream = stream.pipe(rename('vendor' + currentTime + '.css')); } stream.pipe(gulp.dest(destBasePath + 'css/')) }); // Concat app scripts gulp.task('vendorJsAdmin', function (cb) { var stream = gulp.src(paths.vendorJs_admin) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})) .pipe(concat('vendor_admin.js')) .pipe(header(banner, {pkg: pkg})) .pipe(size({title: 'vendor_admin.js'})) .pipe(gulp.dest(destBasePath + 'js/')) .pipe(uglify()) .pipe(size({title: 'vendor_admin.min.js'})) .pipe(rename('vendor_admin.min.js')) .pipe(gulp.dest(destBasePath + 'js/')) .on('end', cb); }); // Concat app scripts gulp.task('vendorCssAdmin', function () { var stream = gulp.src(paths.vendorCss_admin) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})) .pipe(concat('vendor_admin.css')) .pipe(header(banner, {pkg: pkg})) .pipe(size({title: 'vendor_admin.css'})); if (!env.isLocal) { stream = stream.pipe(rename('vendor_admin' + currentTime + '.css')); } stream.pipe(gulp.dest(destBasePath + 'css/')); }); // Concat app scripts gulp.task('scripts', function (cb) { var preReplace = gulp.src(paths.scripts) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})) .pipe(concat('built.js')) .pipe(header(banner, {pkg: pkg})) .pipe(size({title: 'built.js'})) .pipe(replace('$LoopBack$', '$co.uniko$')); var postReplace; if (argv.localapi) { preReplace = preReplace.pipe(replace('http://uniko.co:3000', 'https://localhost:3000')) .pipe(replace('http://uniko-report.co:3000', 'https://localhost:3000')); gutil.log('pointing at local api'); } if (env.isStaging) { preReplace = preReplace.pipe(uglify()); if (!argv.localapi) { preReplace = preReplace .pipe(replace('http://uniko.co:3000', 'https://uniko-api-stg.herokuapp.com')) .pipe(replace('http://uniko-report.co:3000', 'https://uniko-api-stg.herokuapp.com')); gutil.log('pointing at stg api'); } postReplace = preReplace .pipe(replace('http://front.uniko.co', 'https://stg.uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '1751608348461372')) .pipe(replace('$$UnikoConektaToken$$', 'key_Nre2bpqyCCQ3gFVssSKdccQ')) .pipe(replace('$$UnikoMercadoToken$$', 'TEST-7f841aa4-5d97-41d1-9d63-91fdaf4da252')); } else if (env.isProduction) { preReplace = preReplace.pipe(uglify()); if (!argv.localapi) { preReplace = preReplace .pipe(replace('http://uniko.co:3000', 'https://uniko-api-prod.herokuapp.com')) .pipe(replace('http://uniko-report.co:3000', 'https://uniko-api-report.herokuapp.com')); gutil.log('pointing at production api'); } postReplace = preReplace .pipe(replace('http://front.uniko.co', 'https://uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '1587795838180061')) .pipe(replace('$$UnikoConektaToken$$', 'key_Ydfni2pxzs9y1Fo1GrxyU1A')) .pipe(replace('$$UnikoMercadoToken$$', 'APP_USR-5fd930af-f5eb-442f-b25e-7908c99c8bea')); } else if (env.isDevelopment) { preReplace = preReplace.pipe(uglify()); if (!argv.localapi) { preReplace = preReplace .pipe(replace('http://uniko.co:3000', 'https://uniko-api-dev.herokuapp.com')) .pipe(replace('http://uniko-report.co:3000', 'https://uniko-api-dev.herokuapp.com')); gutil.log('pointing at development api'); } postReplace = preReplace .pipe(replace('http://front.uniko.co', 'https://dev.uniko.co')) .pipe(replace('$$UnikofbApiKey$$', '258129971226453')) .pipe(replace('$$UnikoConektaToken$$', 'key_Nre2bpqyCCQ3gFVssSKdccQ')) .pipe(replace('$$UnikoMercadoToken$$', 'TEST-7f841aa4-5d97-41d1-9d63-91fdaf4da252')); } else { if (!argv.localapi) { preReplace = preReplace .pipe(replace('http://uniko.co:3000', 'https://uniko-api-dev.herokuapp.com')) .pipe(replace('http://uniko-report.co:3000', 'https://uniko-api-dev.herokuapp.com')); gutil.log('pointing at development api'); } console.log("1111111ssssss"); postReplace = preReplace //.pipe(replace('$locationProvider.html5Mode(true);', '')) .pipe(replace('http://front.uniko.co', 'https://localhost:4000')) .pipe(replace('$$UnikofbApiKey$$', '1754003701505581')) .pipe(replace('$$UnikoConektaToken$$', 'key_Nre2bpqyCCQ3gFVssSKdccQ')) .pipe(replace('$$UnikoMercadoToken$$', 'TEST-7f841aa4-5d97-41d1-9d63-91fdaf4da252')); } postReplace .pipe(size({title: 'built.min.js'})) .pipe(gulp.dest(destBasePath + 'js/')) .pipe(rename('built.min.js')) .pipe(gulp.dest(destBasePath + 'js/')) .on('end', cb); }); gulp.task('js', ['vendorJs', 'vendorJsAdmin', 'scripts'], function () { var stream = gulp.src([ destBasePath + 'js/vendor.min.js', destBasePath + 'js/vendor_admin.min.js', destBasePath + 'js/built.min.js' ]) .pipe(plumber({errorHandler: onError})) .pipe(concat('build.min.js')) .pipe(header(banner, {pkg: pkg})) .pipe(size({title: 'build.min.js'})) .pipe(gulp.dest(destBasePath + 'js/')); }); // Concat and Compile SASS files gulp.task('less', function () { var stream = gulp.src(paths.less) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})) .pipe(concat('main.less')) .pipe(gulp.dest('./tmp/less/')) .pipe(less({ //plugins: [autoprefix] })); if (!env.isLocal) { stream = stream.pipe(rename('main' + currentTime + '.css')); } stream .pipe(gulp.dest(destBasePath + 'css/')) }); // Concat and Compile SASS files gulp.task('less_admin', function () { var stream = gulp.src(paths.less_admin) .pipe(connect.reload()) .pipe(plumber({errorHandler: onError})) .pipe(concat('main_admin.less')) .pipe(gulp.dest('./tmp/less/')) .pipe(less({ //plugins: [autoprefix] })); if (!env.isLocal) { stream = stream.pipe(rename('main_admin' + currentTime + '.css')); } stream.pipe(gulp.dest(destBasePath + 'css/')) }); gulp.task('clean-images', function (cb) { if (!env.isLocal) { return gulp.src(destBasePath + 'img/**/*', {read: false}) .pipe(clean()) .end(cb); } cb(); }); // Minify and copy images gulp.task('images', ['clean-images'], function () { var stream = gulp.src(paths.images); if (!env.isLocal) { stream = stream.pipe(imagemin()) } stream.pipe(gulp.dest(destBasePath + 'img/', {overwrite: true})); }); // Minify and copy images gulp.task('fonts', function () { gulp.src(paths.fonts) .pipe(flatten()) .pipe(gulp.dest(destBasePath + 'fonts/')); }); /** * Watch files */ gulp.task('watch:html', function () { gulp.watch(paths.html, ['html']); }); gulp.task('watch:index', function () { gulp.watch(paths.htmlIndex, ['index']); }); gulp.task('watch:scripts', function () { gulp.watch(paths.scripts, ['index', 'scripts']); }); gulp.task('watch:vendorCss', function () { gulp.watch(paths.vendorCss, ['index', 'vendorCss']); }); gulp.task('watch:vendorJs', function () { gulp.watch(paths.vendorJs, ['index', 'vendorJs']); }); gulp.task('watch:less', function () { gulp.watch(paths.less, ['index', 'less']); }); gulp.task('watch:images', function () { gulp.watch(paths.images, ['images']); }); gulp.task('watch:fonts', function () { gulp.watch(paths.fonts, ['fonts']); }); gulp.task('watch', ['watch:fonts', 'watch:index', 'watch:html', 'watch:scripts', 'watch:less']); function setEnv(envName) { env = { isProduction: false, isStaging: false, isDevelopment: false, isLocal: false }; env[`is${envName}`] = true; gutil.log(`${envName} environment started`); } gulp.task('setProductionEnv', function () { setEnv('Production'); }); gulp.task('setStgEnv', function () { setEnv('Staging'); }); gulp.task('setDevelopmentEnv', function () { setEnv('Development'); }); gulp.task('setLocalEnv', function () { setEnv('Local'); }); /** * Default task */ gulp.task('buildAssets', ['images', 'fonts', 'index', 'html', 'js', 'vendorCss', 'vendorCssAdmin', 'less', 'less_admin', 'copy', 'copyRoot', 'copyDocs', 'favicon']); gulp.task('heroku:production', ['setProductionEnv', 'buildAssets']); gulp.task('heroku:staging', ['setStgEnv', 'buildAssets']); gulp.task('heroku:development', ['setDevelopmentEnv', 'buildAssets']); gulp.task('dev:production', ['setProductionEnv', 'buildAssets', 'watch']); gulp.task('dev:staging', ['setStgEnv', 'buildAssets', 'watch']); gulp.task('dev:development', ['setDevelopmentEnv', 'buildAssets', 'watch']); gulp.task('dev:local', ['setLocalEnv', 'buildAssets', 'webserver', 'watch']); if (env.isProduction || env.isStaging) { gulp.task('default', ['buildAssets']); //gulp.task('default', ['buildAssets', 'webserver', 'watch']); //in case of fire. } else { gulp.task('default', ['buildAssets', 'webserver', 'watch']); }