Gruntfile.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. const webpackConfig = require('./webpack.config');
  2. const buildWebpackConfig = require('./webpackbuild.config');
  3. const qunitWebpackConfig = require('./qunit/webpack.config');
  4. module.exports = function (grunt) {
  5. function createBanner(fileName) {
  6. return "/*!\n" +
  7. "* " + fileName + "\n" +
  8. "* <%= pkg.homepage %>\n" +
  9. "* Copyright (c) 2010 - <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>\n" +
  10. "* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n" +
  11. "* Version: <%= pkg.version %>\n" +
  12. "*/\n";
  13. }
  14. function createUglifyConfig(path) {
  15. var uglifyConfig = {};
  16. var srcFiles = grunt.file.expand(path + "/**/*.js");
  17. for (var srcNdx in srcFiles) {
  18. var dstFile = srcFiles[srcNdx].replace("js/", ""),
  19. dstFileMin = dstFile.replace(".js", ".min.js");
  20. uglifyConfig[dstFile] = {
  21. dest: 'dist/inputmask/' + dstFile,
  22. src: srcFiles[srcNdx],
  23. options: {
  24. banner: createBanner(dstFile),
  25. beautify: true,
  26. mangle: false,
  27. preserveComments: false,
  28. ASCIIOnly: true
  29. }
  30. };
  31. uglifyConfig[dstFileMin] = {
  32. dest: "dist/min/inputmask/" + dstFileMin,
  33. src: srcFiles[srcNdx],
  34. options: {
  35. banner: createBanner(dstFileMin),
  36. preserveComments: false,
  37. ASCIIOnly: true
  38. }
  39. };
  40. }
  41. uglifyConfig["bundle"] = {
  42. dest: "dist/jquery.inputmask.bundle.js",
  43. src: "build/bundle.js",
  44. options: {
  45. banner: createBanner("jquery.inputmask.bundle.js"),
  46. beautify: true,
  47. mangle: false,
  48. preserveComments: false,
  49. ASCIIOnly: true
  50. }
  51. };
  52. uglifyConfig["bundlemin"] = {
  53. dest: "dist/min/jquery.inputmask.bundle.min.js",
  54. src: "build/bundle.js",
  55. options: {
  56. banner: createBanner("jquery.inputmask.bundle.js"),
  57. preserveComments: false,
  58. ASCIIOnly: true
  59. }
  60. };
  61. return uglifyConfig;
  62. }
  63. // Project configuration.
  64. grunt.initConfig({
  65. pkg: grunt.file.readJSON("package.json"),
  66. uglify: createUglifyConfig("js"),
  67. clean: ["dist"],
  68. karma: {
  69. options: {
  70. configFile: 'karma.conf.js'
  71. },
  72. unit: {
  73. runnerPort: 9999,
  74. singleRun: true,
  75. browsers: ["Chrome"], //will later add extra test targets
  76. logLevel: 'ERROR'
  77. }
  78. },
  79. bump: {
  80. options: {
  81. files: ['package.json', 'bower.json', 'composer.json', 'component.json'],
  82. updateConfigs: ['pkg'],
  83. commit: false,
  84. createTag: false,
  85. push: false
  86. }
  87. },
  88. release: {
  89. options: {
  90. bump: false,
  91. commitMessage: 'Inputmask <%= version %>'
  92. }
  93. },
  94. nugetpack: {
  95. dist: {
  96. src: function () {
  97. return 'nuspecs/Inputmask.nuspec';
  98. }(),
  99. dest: 'build/',
  100. options: {
  101. version: '<%= pkg.version %>'
  102. }
  103. },
  104. dist2: {
  105. src: function () {
  106. return 'nuspecs/jquery.inputmask.nuspec';
  107. }(),
  108. dest: 'build/',
  109. options: {
  110. version: '<%= pkg.version %>'
  111. }
  112. }
  113. },
  114. nugetpush: {
  115. dist: {
  116. src: 'build/InputMask.<%= pkg.version %>.nupkg',
  117. options: {
  118. source: "https://www.nuget.org"
  119. }
  120. },
  121. dist2: {
  122. src: 'build/jquery.inputMask.<%= pkg.version %>.nupkg',
  123. options: {
  124. source: "https://www.nuget.org"
  125. }
  126. }
  127. },
  128. shell: {
  129. options: {
  130. stderr: false
  131. },
  132. gitcommitchanges: {
  133. command: ['git add .',
  134. 'git reset -- package.json',
  135. 'git commit -m "Inputmask <%= pkg.version %>"'
  136. ].join('&&')
  137. }
  138. },
  139. eslint: {
  140. target: "{extra/*,js}/*.js"
  141. },
  142. availabletasks: {
  143. tasks: {
  144. options: {
  145. filter: 'exclude',
  146. tasks: ['availabletasks', 'default', 'updateDistConfig'],
  147. showTasks: ['user']
  148. }
  149. }
  150. },
  151. webpack: {
  152. main: webpackConfig,
  153. build: buildWebpackConfig,
  154. qunit: qunitWebpackConfig
  155. }
  156. });
  157. // Load the plugin that provides the tasks.
  158. require('load-grunt-tasks')(grunt);
  159. grunt.registerTask('publish:patch', ['clean', 'bump:patch', 'webpack:build', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  160. grunt.registerTask('publish:minor', ['clean', 'bump:minor', 'webpack:build', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  161. grunt.registerTask('publish:major', ['clean', 'bump:major', 'webpack:build', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']);
  162. grunt.registerTask('validate', ['webpack:qunit', 'eslint', 'karma']);
  163. grunt.registerTask('build', ['bump:prerelease', 'clean', 'webpack:build', 'uglify']);
  164. grunt.registerTask('default', ["availabletasks"]);
  165. };