cobuild-angular-stack
Version:
Base stack angular sass jade gulp
514 lines (461 loc) • 18.6 kB
JavaScript
;
/**
* 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']);
}