Gruntfile.js 4.6 KB

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