generator-yaas-builder-module
Version:
Yeoman generator for creating yaas builder modules
237 lines (206 loc) • 6.47 kB
JavaScript
'use strict';
module.exports = function(grunt) {
var CSS_DIR = 'public/css',
LESS_DIR = 'public/less',
JS_DIR = 'public/js';
// Dynamic domain replacement
var PROD_DOMAIN = 'api.yaas.io',
TEST_DOMAIN = 'yaas-test.apigee.net/test/',
STAGE_DOMAIN = 'api.stage.yaas.io',
REPLACEMENT_PATH = './public/js/app/site-config.js',
DOMAIN_MSG = 'Could not find environment domain in build parameter. Built with default domain. Use grunt build:test [:stage or :prod] to specify.';
require('load-grunt-tasks')(grunt);
grunt.loadNpmTasks('grunt-text-replace');
grunt.loadNpmTasks('grunt-mustache-render');
grunt.loadNpmTasks('grunt-contrib-less');
// Project Configuration
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
watch: {
js: {
files: [JS_DIR + '/**'],
tasks: ['jshint:all'],
options: {
livereload: true
}
},
html: {
files: ['public/views/**'],
options: {
livereload: true
}
},
css: {
files: [CSS_DIR + '/**'],
options: {
livereload: true
}
},
less: {
files: [LESS_DIR + '/**'],
tasks: ['less'],
options: {
livereload: true
}
}
},
jshint: {
options: {
jshintrc: '.jshintrc'
},
all: [
'gruntfile.js',
'public/js/{,**/}*.js',
'!public/js/vendor/{,**/}*.js'
]
},
concurrent: {
dev: {
tasks: ['connect', 'watch'],
options: {
logConcurrentOutput: true
}
}
},
less: {
dist: {
options: {
paths: ['public/css']
},
files: {
'public/css/style.css': ['public/less/index.less']
}
},
dev: {
options: {
paths: ['public/less']
},
files: {
'public/css/style.css': ['public/less/index.less']
}
}
},
connect: {
all: {
options:{
port: 9000,
hostname: '0.0.0.0',
keepalive: true
}
}
},
clean: {
dist: {
files: [{
dot: true,
src: [
'.tmp',
'dist/*'
]
}]
}
},
copy: {
main: {
expand: true,
cwd: 'public/',
src: ['**', '!js/**', '../index.html', '!less/**'],
dest: 'dist/'
}
},
rev: {
files: {
src: ['dist/**/*.{js,css}']
}
},
useminPrepare: {
html: 'index.html'
},
usemin: {
html: ['dist/index.html']
},
karma: {
unit: { configFile: 'config/karma.conf.js', keepalive: true }
},
uglify: {
options: {
report: 'min',
mangle: false,
'ascii_only': true,
'quote_keys': true
}
},
replace: {
test: {
src: [ REPLACEMENT_PATH ],
overwrite: true,
replacements: [{
from: /StartDynamicDomain(.*)EndDynamicDomain/g,
to: 'StartDynamicDomain*/ \''+ TEST_DOMAIN +'\' /*EndDynamicDomain'
}]
},
stage: {
src: [ REPLACEMENT_PATH ],
overwrite: true,
replacements: [{
from: /StartDynamicDomain(.*)EndDynamicDomain/g,
to: 'StartDynamicDomain*/ \''+ STAGE_DOMAIN +'\' /*EndDynamicDomain'
}]
},
prod: {
src: [ REPLACEMENT_PATH ],
overwrite: true,
replacements: [{
from: /StartDynamicDomain(.*)EndDynamicDomain/g,
to: 'StartDynamicDomain*/ \''+ PROD_DOMAIN +'\' /*EndDynamicDomain'
}]
}
}
});
grunt.option('force', true);
// Read build parameter and set the dynamic domain for environment or give warning message.
function runDomainReplace(domainParam){
switch ((domainParam !== undefined) ? domainParam.toLowerCase() : domainParam ) {
case 'test':
grunt.task.run('replace:test');
break;
case 'stage':
grunt.task.run('replace:stage');
break;
case 'prod':
grunt.task.run('replace:prod');
break;
default:
grunt.warn(DOMAIN_MSG);
grunt.task.run('replace:test');
}
}
// Wrap default build task to add parameters and warnings.
grunt.registerTask('default', 'Warning for default', function(domainParam){
runDomainReplace(domainParam);
grunt.task.run('defaultTask');
});
// Wrap build task to add parameters and warnings.
grunt.registerTask('build', 'Parameters for build', function(domainParam){
runDomainReplace(domainParam);
grunt.task.run('buildTask');
});
// Default task
grunt.registerTask('defaultTask', [
'jshint',
'concurrent:dev',
'less'
]);
// Build task
grunt.registerTask('buildTask', [
'clean:dist',
'concurrent:dist',
'copy',
'useminPrepare',
'concat',
'uglify',
'rev',
'usemin',
'less'
]);
};