gruntfile.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. module.exports = function (grunt) {
  2. var version = grunt.file.readJSON('package.json').version
  3. var banner =
  4. '/**\n' +
  5. ' * Vue.js v' + version + '\n' +
  6. ' * (c) ' + new Date().getFullYear() + ' Evan You\n' +
  7. ' * Released under the MIT License.\n' +
  8. ' */\n'
  9. grunt.initConfig({
  10. jshint: {
  11. options: {
  12. reporter: require('jshint-stylish'),
  13. jshintrc: true
  14. },
  15. build: {
  16. src: ['gruntfile.js', 'tasks/*.js']
  17. },
  18. src: {
  19. src: 'src/**/*.js'
  20. },
  21. test: {
  22. src: ['test/unit/specs/**/*.js']
  23. }
  24. },
  25. karma: {
  26. options: {
  27. frameworks: ['jasmine', 'commonjs'],
  28. files: [
  29. 'src/**/*.js',
  30. 'test/unit/specs/**/*.js'
  31. ],
  32. preprocessors: {
  33. 'src/**/*.js': ['commonjs'],
  34. 'test/unit/specs/**/*.js': ['commonjs']
  35. },
  36. singleRun: true
  37. },
  38. browsers: {
  39. options: {
  40. browsers: ['Chrome', 'Firefox'],
  41. reporters: ['progress']
  42. }
  43. },
  44. phantom: {
  45. options: {
  46. browsers: ['PhantomJS'],
  47. reporters: ['progress', 'coverage'],
  48. preprocessors: {
  49. 'src/**/*.js': ['commonjs', 'coverage'],
  50. 'test/unit/specs/**/*.js': ['commonjs']
  51. },
  52. coverageReporter: {
  53. reporters: [
  54. { type: 'lcov' },
  55. { type: 'text-summary' }
  56. ]
  57. }
  58. }
  59. }
  60. },
  61. browserify: {
  62. build: {
  63. src: ['src/vue.js'],
  64. dest: 'dist/vue.js',
  65. options: {
  66. bundleOptions: {
  67. standalone: 'Vue'
  68. },
  69. postBundleCB: function (err, src, next) {
  70. next(err, banner + src)
  71. }
  72. }
  73. },
  74. watch: {
  75. src: ['src/vue.js'],
  76. dest: 'dist/vue.js',
  77. options: {
  78. watch: true,
  79. keepAlive: true,
  80. bundleOptions: {
  81. standalone: 'Vue'
  82. }
  83. }
  84. },
  85. bench: {
  86. src: ['benchmarks/bench.js'],
  87. dest: 'benchmarks/browser.js'
  88. },
  89. test: {
  90. src: ['test/unit/specs/**/*.js'],
  91. dest: 'test/unit/specs.js'
  92. }
  93. },
  94. uglify: {
  95. build: {
  96. options: {
  97. banner: banner,
  98. compress: {
  99. pure_funcs: [
  100. '_.log',
  101. '_.warn',
  102. '_.assertAsset',
  103. 'enableDebug'
  104. ]
  105. }
  106. },
  107. files: {
  108. 'dist/vue.min.js': ['dist/vue.js']
  109. }
  110. }
  111. }
  112. })
  113. // load npm tasks
  114. grunt.loadNpmTasks('grunt-contrib-jshint')
  115. grunt.loadNpmTasks('grunt-contrib-uglify')
  116. grunt.loadNpmTasks('grunt-karma')
  117. grunt.loadNpmTasks('grunt-browserify')
  118. // load custom tasks
  119. grunt.file.recurse('tasks', function (path) {
  120. require('./' + path)(grunt)
  121. })
  122. grunt.registerTask('unit', ['karma:browsers'])
  123. grunt.registerTask('cover', ['karma:phantom'])
  124. grunt.registerTask('bench', ['browserify:bench'])
  125. grunt.registerTask('watch', ['browserify:watch'])
  126. grunt.registerTask('build', ['component', 'browserify:build', 'uglify:build', 'size'])
  127. grunt.registerTask('test', ['unit', 'cover'])
  128. grunt.registerTask('default', ['jshint', 'test', 'build'])
  129. }