UNPKG

generator-yaas-builder-module

Version:
237 lines (206 loc) 6.47 kB
'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' ]); };