diff --git a/Gruntfile.js b/Gruntfile.js index 282ec9dd7370..6b2554f87657 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -11,6 +11,19 @@ module.exports = function (grunt) { docsDir: 'docs/' }; + config.mode = grunt.option('mode') || 'standalone'; + config.modeOptions = { + requirejs: { + paths: { config: '../config.sample' }, + excludeConfig: true, + } + }; + + if (config.mode === 'backend') { + config.modeOptions.requirejs.path = { config: 'components/config' }; + config.modeOptions.requirejs.excludeConfig = true; + } + // load plugins require('load-grunt-tasks')(grunt); @@ -34,5 +47,4 @@ module.exports = function (grunt) { // pass the config to grunt grunt.initConfig(config); - }; diff --git a/package.json b/package.json index ba7a4c9324aa..305d778c4c0c 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "dependencies": { "grunt-jscs-checker": "^0.4.4", "karma-sinon": "^1.0.3", + "lodash": "^2.4.1", "sinon": "^1.10.3" } } diff --git a/tasks/build_task.js b/tasks/build_task.js index 6a4370f89707..0c85a52d716f 100644 --- a/tasks/build_task.js +++ b/tasks/build_task.js @@ -20,7 +20,7 @@ module.exports = function(grunt) { 'filerev', 'usemin', 'clean:temp', - // 'uglify:dest' + 'uglify:dest' ]); grunt.registerTask('build:grafanaVersion', function() { diff --git a/tasks/options/requirejs.js b/tasks/options/requirejs.js index 735993fcf803..fd7fa2975b56 100644 --- a/tasks/options/requirejs.js +++ b/tasks/options/requirejs.js @@ -1,90 +1,92 @@ module.exports = function(config,grunt) { 'use strict'; - var _c = { - build: { - options: { - appDir: '<%= tempDir %>', - dir: '<%= destDir %>', - baseUrl: './app', + function buildRequireJsOptions() { - mainConfigFile: '<%= tempDir %>/app/components/require.standalone.js', - modules: [], // populated below, + var options = { + appDir: '<%= tempDir %>', + dir: '<%= destDir %>', + mainConfigFile: '<%= tempDir %>/app/components/require.<%= mode %>.js', + baseUrl: './app', + paths: config.modeOptions.requirejs.paths, - optimize: 'none', - optimizeCss: 'none', - optimizeAllPluginResources: false, + modules: [], // populated below, - paths: { config: '../config.sample' }, // fix, fallbacks need to be specified + optimize: 'none', + optimizeCss: 'none', + optimizeAllPluginResources: false, - removeCombined: true, - findNestedDependencies: true, - normalizeDirDefines: 'all', - inlineText: true, - skipPragmas: true, + removeCombined: true, + findNestedDependencies: true, + normalizeDirDefines: 'all', + inlineText: true, + skipPragmas: true, - done: function (done, output) { - var duplicates = require('rjs-build-analysis').duplicates(output); + done: function (done, output) { + var duplicates = require('rjs-build-analysis').duplicates(output); - if (duplicates.length > 0) { - grunt.log.subhead('Duplicates found in requirejs build:'); - grunt.log.warn(duplicates); - done(new Error('r.js built duplicate modules, please check the excludes option.')); - } - - done(); + if (duplicates.length > 0) { + grunt.log.subhead('Duplicates found in requirejs build:'); + grunt.log.warn(duplicates); + done(new Error('r.js built duplicate modules, please check the excludes option.')); } + + done(); } - } - }; + }; - // setup the modules require will build - var requireModules = _c.build.options.modules = [ + // setup the modules require will build + var requireModules = options.modules = [ { // main/common module name: 'app', - include: [ - 'css', - 'kbn', - 'text', - 'jquery', - 'angular', - 'settings', - 'bootstrap', - 'modernizr', - 'timepicker', - 'datepicker', - 'lodash', - 'jquery.flot', - 'angular-strap', - 'angular-dragdrop', - 'services/all', - 'features/all', - 'directives/all', - 'filters/all', - 'controllers/all', - 'routes/standalone/all', - 'routes/backend/all', - 'components/partials', - ] - } - ]; - - var fs = require('fs'); - var panelPath = config.srcDir+'/app/panels'; + include: [ + 'css', + 'kbn', + 'text', + 'jquery', + 'angular', + 'settings', + 'bootstrap', + 'modernizr', + 'timepicker', + 'datepicker', + 'lodash', + 'jquery.flot', + 'angular-strap', + 'angular-dragdrop', + 'services/all', + 'features/all', + 'directives/all', + 'filters/all', + 'controllers/all', + 'routes/standalone/all', + 'routes/backend/all', + 'components/partials', + ] + } + ]; - // create a module for each directory in src/app/panels/ - fs.readdirSync(panelPath).forEach(function (panelName) { - requireModules[0].include.push('panels/'+panelName+'/module'); - requireModules[0].include.push('text!panels/'+panelName+'/module.html'); - }); + var fs = require('fs'); + var panelPath = config.srcDir+'/app/panels'; - // exclude the literal config definition from all modules - requireModules - .forEach(function (module) { - module.excludeShallow = module.excludeShallow || []; - module.excludeShallow.push('config'); + // create a module for each directory in src/app/panels/ + fs.readdirSync(panelPath).forEach(function (panelName) { + requireModules[0].include.push('panels/'+panelName+'/module'); + requireModules[0].include.push('text!panels/'+panelName+'/module.html'); }); - return _c; + if (config.modeOptions.requirejs.excludeConfig) { + // exclude the literal config definition from all modules + requireModules + .forEach(function (module) { + module.excludeShallow = module.excludeShallow || []; + module.excludeShallow.push('config'); + }); + } + + return { options: options }; + } + + return { build: buildRequireJsOptions() }; };