Gruntfile.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. 'use strict';
  2. var path = require('path');
  3. var require_transform = require('./transforms/require-transform.js');
  4. function absolute(a){
  5. if (Array.isArray(a))
  6. return a.map(function(r){ return path.join(__dirname, r); });
  7. var ret = {};
  8. Object.keys(a).forEach(function(r){
  9. ret[path.join(__dirname, r)] = a[r]; });
  10. return ret;
  11. }
  12. module.exports = function(grunt) {
  13. let pkg = grunt.file.readJSON('package.json');
  14. let version = pkg.version;
  15. require('time-grunt')(grunt);
  16. grunt.initConfig({
  17. pkg: pkg,
  18. jshint: {
  19. options: {jshintrc: '.jshintrc'},
  20. all: ['src/*.js', './*.js'],
  21. },
  22. clean: {
  23. dist: ['dist/*'],
  24. patched: ['src/yp-player.patched.js'],
  25. },
  26. replace: {
  27. dist: {
  28. src: ['src/yp-player.js'],
  29. dest: 'src/yp-player.patched.js',
  30. replacements: [{
  31. from: 'require(\'@hola.org/hap.js/lib/hola_videojs_hls.js\')',
  32. to: 'yp_vjs_provider_require()'
  33. }]
  34. }
  35. },
  36. browserify: {
  37. options: {
  38. browserifyOptions: {
  39. standalone: 'yp-player',
  40. debug: true,
  41. noParse: absolute([
  42. './node_modules/video.js/dist/video.js',
  43. ]),
  44. },
  45. transform: [
  46. ['browserify-versionify', {
  47. placeholder: '__VERSION__',
  48. version: pkg.version,
  49. }],
  50. 'browserify-css',
  51. 'brfs',
  52. ],
  53. plugin: ['browserify-derequire'],
  54. },
  55. watch: {
  56. options: {
  57. watch: true,
  58. keepAlive: true,
  59. },
  60. files: {'dist/yp-player.dev.js': ['src/yp-player.js']},
  61. },
  62. vjs: {
  63. files: {'work/yp-vjs.dev.js':
  64. ['./node_modules/@hola.org/hap.js/lib/hola_videojs_hls.js']
  65. },
  66. },
  67. dist: {
  68. files: {
  69. 'work/yp-player.dev.js': ['src/yp-player.patched.js'],
  70. },
  71. options: {
  72. ignore: [
  73. 'videojs-contrib-dash',
  74. './node_modules/@hola.org/dashjs/**'
  75. ],
  76. },
  77. },
  78. },
  79. exorcise: {
  80. vjs: {
  81. files: {
  82. 'work/yp-vjs.dev.js.map': ['work/yp-vjs.dev.js'],
  83. },
  84. },
  85. dist: {
  86. files: {
  87. 'work/yp-player.dev.js.map': ['work/yp-player.dev.js'],
  88. },
  89. },
  90. },
  91. less: {
  92. options: {
  93. paths: ['src/css/']
  94. },
  95. all: {
  96. files: [
  97. {
  98. nonull: true,
  99. dest: 'src/css/videojs-hola-skin.css',
  100. src: ['src/css/skin-*.less']
  101. },
  102. {
  103. nonull: true,
  104. dest: 'src/css/videojs-settings.css',
  105. src: ['src/css/videojs-settings.less']
  106. }
  107. ]
  108. }
  109. },
  110. uglify : {
  111. options: {sourceMap: false},
  112. vjs: {
  113. files: {'work/yp-vjs.js': 'work/yp-vjs.dev.js'},
  114. },
  115. dist: {
  116. files: {'work/yp-player.js': 'work/yp-player.dev.js'},
  117. },
  118. },
  119. version: {
  120. options: {
  121. prefix: '',
  122. replace: '\\{\\[version\\]\\}'
  123. },
  124. src: ['dist/js/videojs-hola-skin.js']
  125. },
  126. concat: {
  127. options: {
  128. banner: `(function(){
  129. var yp_vjs_provider_require, hola_player_api;
  130. var E = yp_player_api = {};
  131. E.zdot = function(name){
  132. // zdot_stub:
  133. // zdot_stub:return {
  134. // zdot_stub:customer: {[=json it.customer]},
  135. // zdot_stub:json: {[=json it.json]},
  136. // zdot_stub:}[name];
  137. return {}[name];
  138. };
  139. E.customer = E.zdot('customer');
  140. E.disable = function(){};
  141. function yp_player_init(){
  142. `, separator: `
  143. };
  144. yp_vjs_provider_require = function(){
  145. var res, define = function(name, fn){res=fn();};
  146. define.amd = true;
  147. `, footer: `
  148. return res;
  149. };
  150. yp_player_init();
  151. })();`, sourceMap: true,
  152. },
  153. dist: {
  154. files: {'dist/yp-player.js':
  155. ['work/yp-player.js', 'work/yp-vjs.js'],
  156. 'dist/yp-player.dev.js':
  157. ['work/yp-player.dev.js', 'work/yp-vjs.dev.js'],
  158. }
  159. },
  160. },
  161. zip: {
  162. dist: {
  163. router: function(filepath){
  164. return path.relative('dist', filepath);
  165. },
  166. src: ['dist/**/*'],
  167. dest: 'dist/yp-player-'+pkg.version+'.zip',
  168. },
  169. },
  170. });
  171. require('load-grunt-tasks')(grunt);
  172. grunt.loadNpmTasks('chg');
  173. grunt.registerTask('build', ['clean', 'jshint', 'less', 'version', 'replace',
  174. 'browserify:vjs', 'browserify:dist',
  175. 'clean:patched', 'exorcise', 'uglify', 'concat', 'zip']);
  176. grunt.registerTask('default', ['build']);
  177. };