瀏覽代碼

more work on two grunt build modes, backend/standalone modes

Torkel Ödegaard 11 年之前
父節點
當前提交
9c3cd87bee
共有 4 個文件被更改,包括 87 次插入72 次删除
  1. 13 1
      Gruntfile.js
  2. 1 0
      package.json
  3. 1 1
      tasks/build_task.js
  4. 72 70
      tasks/options/requirejs.js

+ 13 - 1
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);
-
 };

+ 1 - 0
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"
   }
 }

+ 1 - 1
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() {

+ 72 - 70
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() };
 };