Gruntfile.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. var fs = require('fs'),
  2. path = require('path')
  3. module.exports = function( grunt ) {
  4. grunt.initConfig({
  5. component_build: {
  6. build: {
  7. output: './dist/',
  8. name: 'seed',
  9. styles: false,
  10. standalone: 'Seed'
  11. },
  12. test: {
  13. output: './dist/',
  14. name: 'seed.test',
  15. styles: false
  16. }
  17. },
  18. jshint: {
  19. dev: {
  20. src: ['src/**/*.js'],
  21. options: {
  22. jshintrc: './.jshintrc'
  23. }
  24. },
  25. test: {
  26. src: ['test/unit/specs/*.js', 'test/functional/specs/*.js'],
  27. options: {
  28. jshintrc: 'test/.jshintrc'
  29. }
  30. }
  31. },
  32. mocha: {
  33. test: {
  34. src: ['test/unit/runner.html'],
  35. options: {
  36. reporter: 'Spec',
  37. run: true
  38. }
  39. }
  40. },
  41. uglify: {
  42. build: {
  43. options: {
  44. compress: true,
  45. mangle: true,
  46. banner:
  47. '// Seed.js ' + require('./package.json').version + '\n' +
  48. '// (c) 2013 Evan You\n' +
  49. '// https://github.com/yyx990803/seed\n'
  50. },
  51. files: {
  52. 'dist/seed.min.js': 'dist/seed.js'
  53. }
  54. }
  55. },
  56. watch: {
  57. options: {
  58. livereload: true
  59. },
  60. component: {
  61. files: ['src/**/*.js', 'component.json'],
  62. tasks: ['component_build']
  63. }
  64. }
  65. })
  66. grunt.loadNpmTasks( 'grunt-contrib-watch' )
  67. grunt.loadNpmTasks( 'grunt-contrib-jshint' )
  68. grunt.loadNpmTasks( 'grunt-contrib-uglify' )
  69. grunt.loadNpmTasks( 'grunt-component-build' )
  70. grunt.loadNpmTasks( 'grunt-mocha' )
  71. grunt.registerTask( 'version', function (version) {
  72. ;['package', 'bower', 'component'].forEach(function (file) {
  73. file = './' + file + '.json'
  74. var json = fs.readFileSync(file, 'utf-8')
  75. json = json.replace(/"version"\s*:\s*"(.+?)"/, '"version": "' + version + '"')
  76. fs.writeFileSync(file, json)
  77. })
  78. })
  79. grunt.registerTask( 'release', function (version) {
  80. if (!version || !isValid(version)) {
  81. return grunt.fail.warn('Must provide a valid semver version number.')
  82. }
  83. grunt.task.run(['version:' + version, 'default'])
  84. function isValid (v) {
  85. var nums = v.split('.')
  86. if (nums.length !== 3) return false
  87. var current = require('./package.json').version.split('.'),
  88. a1 = +nums[0],
  89. b1 = +nums[1],
  90. c1 = +nums[2],
  91. a2 = +current[0],
  92. b2 = +current[1],
  93. c2 = +current[2]
  94. if (a1 < a2) return false
  95. if (a1 === a2 && b1 < b2) return false
  96. if (a1 === a2 && b1 === b2 && c1 < c2) return false
  97. return true
  98. }
  99. })
  100. grunt.registerTask( 'casper', function () {
  101. var done = this.async()
  102. grunt.util.spawn({
  103. cmd: 'casperjs',
  104. args: ['test', 'specs/'],
  105. opts: {
  106. stdio: 'inherit',
  107. cwd: path.resolve('test/functional')
  108. }
  109. }, function (err, res) {
  110. if (err) grunt.fail.fatal(res.stdout || 'CasperJS test failed')
  111. grunt.log.writeln(res.stdout)
  112. done()
  113. })
  114. })
  115. grunt.registerTask( 'test', ['mocha', 'casper'] )
  116. grunt.registerTask( 'default', [
  117. 'jshint:dev',
  118. 'component_build',
  119. 'jshint:test',
  120. 'test',
  121. 'uglify'
  122. ])
  123. }