Browse Source

Added grunt commands to build Amber to a single file

JohnnyT 11 years ago
parent
commit
2bbef607e9
3 changed files with 123 additions and 0 deletions
  1. 9 0
      .gitignore
  2. 108 0
      grunt.js
  3. 6 0
      package.json

+ 9 - 0
.gitignore

@@ -14,3 +14,12 @@ test/run.js
 
 # In case amber is also saved in a local Subversion
 .svn
+
+# Ignoring local NPM modules
+node_modules
+
+# Ignoring folders - compiled versions of Amber
+# local NPM modules, tmp
+dist
+node_modules
+tmp

+ 108 - 0
grunt.js

@@ -0,0 +1,108 @@
+module.exports = function(grunt) {
+
+  grunt.loadNpmTasks('grunt-shell');
+  grunt.loadNpmTasks('grunt-image-embed');
+  grunt.loadNpmTasks('grunt-contrib-mincss');
+
+  grunt.registerTask('build:deploy', 'shell:compileDeploy concat:deploy min');
+  grunt.registerTask('build:dev', 'shell:compileDev concat:css imageEmbed mincss css2js concat:dev');
+  grunt.registerTask('default', 'build:deploy build:dev');
+
+  grunt.initConfig({
+    pkg: '<json:package.json>',
+
+    meta: {
+      banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> */\n'
+    },
+
+    shell: {
+      compileDeploy: {
+        stdout: true,
+        command: 'bin/amberc -l Kernel-Announcements ' +
+          'tmp/amber-compiled.deploy'
+      },
+      compileDev: {
+        stdout: true,
+        command: 'bin/amberc -l ' +
+          'Compiler-Exceptions,Compiler-Core,Compiler-AST,Compiler-Semantic,Compiler-IR,Compiler-Inlining,' +
+          'parser,Importer-Exporter,Kernel-Announcements,' +
+          'SUnit,Compiler-Tests,Kernel-Tests,' +
+          'Canvas,IDE,compat ' +
+          'tmp/amber-compiled'
+      }
+    },
+
+    concat: {
+      deploy: {
+        src: ['tmp/amber-compiled.deploy.js'],
+        dest: 'dist/amber-<%= pkg.version %>.deploy.js'
+      },
+
+      css: {
+        src: [
+          'css/amber.css',
+          'js/lib/CodeMirror/codemirror.css',
+          'js/lib/CodeMirror/amber.css'
+        ],
+        dest: 'tmp/amber.css'
+      },
+
+      dev: {
+        src: [
+          'js/lib/jQuery/jquery-ui-1.8.16.custom.min.js',
+          'js/lib/jQuery/jquery.textarea.js',
+          'js/lib/CodeMirror/codemirror.js',
+          'js/lib/CodeMirror/smalltalk.js',
+          'tmp/amber-compiled.js',
+          'tmp/css.js'
+        ],
+        dest: 'dist/amber-<%= pkg.version %>.js'
+      }
+    },
+
+    imageEmbed: {
+      dev: {
+        src: ['tmp/amber.css'],
+        dest: 'tmp/amber-images.css',
+        options: {baseDir: 'public'}
+      }
+    },
+
+    mincss: {
+      dev: {
+        src: ['tmp/amber-images.css'],
+        dest: 'tmp/amber.min.css'
+      }
+    },
+
+    css2js: {
+      dev: {
+        src: 'tmp/amber.min.css',
+        dest: 'tmp/css.js'
+      }
+    },
+
+    min: {
+      deploy: {
+        src: 'dist/amber-<%= pkg.version %>.deploy.js',
+        dest: 'dist/amber-<%= pkg.version %>.deploy.min.js'
+      }
+    }
+  });
+
+  grunt.registerMultiTask('css2js', 'Embed CSS into JS', function() {
+    var cssContent = grunt.task.directive(grunt.file.expandFiles(this.data.src)[0], grunt.file.read)
+    var content =
+      "var css='"+cssContent+"';" +
+      "var cssTag = document.createElement('link');" +
+      "document.head = document.head || document.getElementsByTagName('head')[0];" +
+      "cssTag.href = 'data:text/css,'+css;" +
+      "cssTag.rel = 'stylesheet';" +
+      "document.head.appendChild(cssTag);";
+
+    grunt.file.write(this.data.dest, content);
+
+    grunt.log.writeln('File "' + this.data.dest + '" created.');
+  });
+
+};

+ 6 - 0
package.json

@@ -24,5 +24,11 @@
     },
     "scripts": {
         "test": "./test/run_build.sh"
+    },
+    "devDependencies": {
+      "grunt" : "*",
+      "grunt-shell" : "*",
+      "grunt-image-embed" : "*",
+      "grunt-contrib-mincss" : "*"
     }
 }