Gruntfile.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. module.exports = function (grunt) {
  2. var embedOption = grunt.option('embedLanguages'),
  3. embedLanguageDest = embedOption ?
  4. 'min/moment-with-customlangs.js' :
  5. 'min/moment-with-langs.js',
  6. embedLanguageLangs = 'lang/*.js';
  7. if (embedOption && embedOption.match(/,/)) {
  8. embedLanguageLangs = 'lang/{' + embedOption + '}.js';
  9. }
  10. else if (embedOption) {
  11. embedLanguageLangs = 'lang/' + embedOption + '.js';
  12. }
  13. grunt.initConfig({
  14. pkg: grunt.file.readJSON('package.json'),
  15. concat : {
  16. langs: {
  17. src: 'lang/*.js',
  18. dest: 'min/langs.js'
  19. },
  20. tests: {
  21. src: [
  22. 'test/browser-prefix.js',
  23. 'test/moment/*.js',
  24. 'test/lang/*.js',
  25. 'test/browser-suffix.js'
  26. ],
  27. dest: 'min/tests.js'
  28. }
  29. },
  30. env : {
  31. sauceLabs : (grunt.file.exists('.sauce-labs.creds') ?
  32. grunt.file.readJSON('.sauce-labs.creds') : {})
  33. },
  34. karma : {
  35. options: {
  36. frameworks: ['nodeunit'],
  37. files: [
  38. 'min/moment-with-langs.js',
  39. 'min/tests.js',
  40. 'test/browser.js'
  41. ],
  42. sauceLabs: {
  43. startConnect: true,
  44. testName: 'MomentJS'
  45. },
  46. customLaunchers: {
  47. slChromeWinXp: {
  48. base: 'SauceLabs',
  49. browserName: 'chrome',
  50. platform: 'Windows XP'
  51. },
  52. slIe9Win7: {
  53. base: 'SauceLabs',
  54. browserName: 'internet explorer',
  55. platform: 'Windows 7',
  56. version: '9'
  57. },
  58. slIe8Win7: {
  59. base: 'SauceLabs',
  60. browserName: 'internet explorer',
  61. platform: 'Windows 7',
  62. version: '8'
  63. },
  64. slFfLinux: {
  65. base: 'SauceLabs',
  66. browserName: 'firefox',
  67. platform: 'Linux'
  68. },
  69. slSafariOsx: {
  70. base: 'SauceLabs',
  71. browserName: 'safari',
  72. platform: 'OS X 10.8'
  73. }
  74. }
  75. },
  76. server: {
  77. browsers: []
  78. },
  79. chrome: {
  80. singleRun: true,
  81. browsers: ['Chrome']
  82. },
  83. firefox: {
  84. singleRun: true,
  85. browsers: ['Firefox']
  86. },
  87. sauce: {
  88. options: {reporters: ['dots']},
  89. singleRun: true,
  90. browsers: [
  91. 'slChromeWinXp',
  92. 'slIe9Win7',
  93. 'slIe8Win7',
  94. 'slFfLinux',
  95. 'slSafariOsx'
  96. ]
  97. }
  98. },
  99. uglify : {
  100. target: {
  101. files: {
  102. 'min/moment-with-langs.min.js' : 'min/moment-with-langs.js',
  103. 'min/moment-with-customlangs.min.js' : 'min/moment-with-customlangs.js',
  104. 'min/langs.min.js' : 'min/langs.js',
  105. 'min/moment.min.js' : 'moment.js'
  106. }
  107. },
  108. options: {
  109. mangle: true,
  110. compress: {
  111. dead_code: false // jshint ignore:line
  112. },
  113. output: {
  114. ascii_only: true // jshint ignore:line
  115. },
  116. report: 'min',
  117. preserveComments: 'some'
  118. }
  119. },
  120. nodeunit : {
  121. all : ["test/moment/**/*.js", "test/lang/**/*.js"]
  122. },
  123. jshint: {
  124. all: [
  125. "Gruntfile.js", "moment.js", "lang/**/*.js", "test/**/*.js",
  126. "!test/browser*.js"
  127. ],
  128. options: {
  129. "node" : true,
  130. "browser" : true,
  131. "boss" : false,
  132. "curly" : true,
  133. "debug" : false,
  134. "devel" : false,
  135. "eqeqeq" : true,
  136. "eqnull" : true,
  137. "evil" : false,
  138. "forin" : false,
  139. "immed" : false,
  140. "laxbreak" : false,
  141. "newcap" : true,
  142. "noarg" : true,
  143. "noempty" : false,
  144. "nonew" : false,
  145. "onevar" : true,
  146. "plusplus" : false,
  147. "regexp" : false,
  148. "undef" : true,
  149. "sub" : true,
  150. "strict" : false,
  151. "white" : true,
  152. "es3" : true,
  153. "camelcase" : true,
  154. "globals": {
  155. "define": false
  156. }
  157. }
  158. },
  159. watch : {
  160. test : {
  161. files : [
  162. 'moment.js',
  163. 'lang/*.js',
  164. 'test/**/*.js'
  165. ],
  166. tasks: ['nodeunit']
  167. },
  168. jshint : {
  169. files : '<%= jshint.all %>',
  170. tasks: ['jshint']
  171. }
  172. },
  173. embedLanguages: {
  174. moment: 'moment.js',
  175. dest: embedLanguageDest,
  176. targetLangs: embedLanguageLangs
  177. }
  178. });
  179. grunt.loadTasks("tasks");
  180. // These plugins provide necessary tasks.
  181. require('load-grunt-tasks')(grunt);
  182. // Default task.
  183. grunt.registerTask('default', ['jshint', 'nodeunit']);
  184. //test tasks
  185. grunt.registerTask('test', ['test:node', 'test:browser']);
  186. grunt.registerTask('test:node', ['nodeunit']);
  187. grunt.registerTask('test:server', ['concat', 'embedLanguages', 'karma:server']);
  188. grunt.registerTask('test:browser', ['concat', 'embedLanguages', 'karma:chrome', 'karma:firefox']);
  189. grunt.registerTask('test:sauce-browser', ['concat', 'embedLanguages', 'env:sauceLabs', 'karma:sauce']);
  190. grunt.registerTask('test:travis-sauce-browser', ['concat', 'embedLanguages', 'karma:sauce']);
  191. // travis build task
  192. grunt.registerTask('build:travis', [
  193. 'jshint', 'test:node', 'check-sauce-creds',
  194. 'test:travis-sauce-browser'
  195. ]);
  196. // Task to be run when releasing a new version
  197. grunt.registerTask('release', [
  198. 'jshint', 'nodeunit', 'concat', 'embedLanguages',
  199. 'component', 'uglify'
  200. ]);
  201. };