Gruntfile.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*global module*/
  2. module.exports = function (grunt) {
  3. 'use strict';
  4. // The banner on top of the build
  5. var banner = '/**\n' +
  6. ' * Open Sheet Music Display <%= pkg.version %> built on <%= grunt.template.today("yyyy-mm-dd") %>.\n' +
  7. ' * Copyright (c) 2016 PhonicScore\n' +
  8. ' *\n' +
  9. ' * https://github.com/opensheetmusicdisplay/opensheetmusicdisplay\n' +
  10. ' */\n',
  11. // Additional manual typings:
  12. typings = [
  13. 'typings/browser.d.ts',
  14. 'typings/vexflow.d.ts',
  15. 'typings/fft.d.ts'
  16. ],
  17. // Paths
  18. src = ['src/**/*.ts'],
  19. test = ['test/**/*.ts'];
  20. // Grunt configuration following:
  21. grunt.initConfig({
  22. pkg: grunt.file.readJSON('package.json'),
  23. banner: banner,
  24. // Build output directories
  25. outputDir: {
  26. build: 'build',
  27. dist: 'dist'
  28. },
  29. // Browserify
  30. browserify: {
  31. dist: {
  32. src: [].concat(typings, src),
  33. dest: '<%= outputDir.build %>/osmd.js',
  34. options: {
  35. banner: "<%= banner %>"
  36. }
  37. },
  38. debug: {
  39. src: [].concat(typings, src, test),
  40. dest: '<%= outputDir.build %>/osmd-debug.js',
  41. options: {
  42. banner: "<%= banner %>",
  43. browserifyOptions: {
  44. debug: true
  45. }
  46. }
  47. },
  48. options: {
  49. plugin: ['tsify'],
  50. browserifyOptions: {
  51. standalone: 'MeasureSizeCalculator'
  52. }
  53. }
  54. },
  55. // Uglify
  56. /*uglify: {
  57. options: {
  58. compress: {
  59. drop_console: true
  60. }
  61. },
  62. my_target: {
  63. files: {
  64. 'build/osmd.js': ['src/input.js']
  65. }
  66. }
  67. },*/
  68. // Karma setup
  69. karma: {
  70. // For continuous integration
  71. ci: {
  72. configFile: 'karma.conf.js',
  73. options: {
  74. browsers: ['PhantomJS']
  75. }
  76. },
  77. debugWithFirefox: {
  78. configFile: 'karma.conf.js',
  79. options: {
  80. singleRun: false,
  81. browsers: ['Firefox']
  82. }
  83. },
  84. debugWithChrome: {
  85. configFile: 'karma.conf.js',
  86. options: {
  87. singleRun: false,
  88. browsers: ['Chrome']
  89. }
  90. }
  91. },
  92. // TSLint setup
  93. tslint: {
  94. options: {
  95. configuration: 'tslint.json'
  96. },
  97. all: {
  98. src: [].concat(src, test)
  99. }
  100. },
  101. // JsHint setup
  102. jshint: {
  103. all: ['Gruntfile.js', 'karma.conf.js']
  104. },
  105. // TypeScript Type Definitions
  106. typings: {
  107. install: {}
  108. },
  109. // Documentation
  110. docco: {
  111. src: src,
  112. options: {
  113. layout: 'linear',
  114. output: 'build/docs'
  115. }
  116. },
  117. // Cleaning task setup
  118. clean: {
  119. options: {
  120. force: true
  121. },
  122. all: {
  123. src: [
  124. '<%= outputDir.build %>',
  125. '<%= outputDir.dist %>',
  126. '.tscache',
  127. 'src/**/*.js', 'test/**/*.js'
  128. ]
  129. }
  130. }
  131. });
  132. // Load Npm tasks
  133. grunt.loadNpmTasks('grunt-karma');
  134. grunt.loadNpmTasks('grunt-docco');
  135. grunt.loadNpmTasks('grunt-tslint');
  136. grunt.loadNpmTasks('grunt-typings');
  137. grunt.loadNpmTasks('grunt-browserify');
  138. grunt.loadNpmTasks('grunt-contrib-clean');
  139. grunt.loadNpmTasks('grunt-contrib-watch');
  140. grunt.loadNpmTasks('grunt-contrib-jshint');
  141. // Register tasks
  142. grunt.registerTask('all', ['typings', 'default']);
  143. grunt.registerTask('default', ['lint', 'browserify', 'karma:ci']);
  144. grunt.registerTask('test', ['lint', 'browserify:debug', 'karma:ci']);
  145. grunt.registerTask('rebuild', ['clean', 'default']);
  146. grunt.registerTask('publish', ['clean', 'browserify:dist', 'docco']);
  147. grunt.registerTask('lint', ['jshint', 'tslint']);
  148. // Fix these in the future:
  149. // grunt.registerTask('test debug Firefox', ['browserify:debug', 'karma:debugWithFirefox']);
  150. // grunt.registerTask('test debug Chrome', ['browserify:debug', 'karma:debugWithChrome']);
  151. };