gulpfile.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. 'use strict';
  2. var gulp = require('gulp');
  3. var sass = require('gulp-sass');
  4. var cssmin = require('gulp-cssmin');
  5. var mocha = require('gulp-spawn-mocha');
  6. var concat = require('gulp-concat');
  7. var rename = require('gulp-rename');
  8. var uglify = require('gulp-uglify');
  9. var jshint = require('gulp-jshint');
  10. var stylish = require('jshint-stylish');
  11. var pkg = require('./package.json');
  12. var dirs = {
  13. cssSrc: './resource/css',
  14. cssDist: './public/css',
  15. jsSrc: './resource/js',
  16. jsDist: './public/js',
  17. };
  18. var tests = {
  19. watch: ['test/**/*.test.js'],
  20. }
  21. var css = {
  22. src: dirs.cssSrc + '/' + pkg.name + '.scss',
  23. main: dirs.cssDist + '/crowi-main.css',
  24. dist: dirs.cssDist + '/crowi.css',
  25. watch: ['resource/css/*.scss'],
  26. };
  27. var js = {
  28. src: [
  29. 'bower_components/jquery/dist/jquery.js',
  30. 'bower_components/bootstrap-sass-official/assets/javascripts/bootstrap.js',
  31. 'bower_components/inline-attachment/src/inline-attachment.js',
  32. 'bower_components/inline-attachment/src/jquery.inline-attachment.js',
  33. 'node_modules/socket.io-client/socket.io.js',
  34. 'bower_components/marked/lib/marked.js',
  35. 'bower_components/jquery.cookie/jquery.cookie.js',
  36. 'bower_components/highlightjs/highlight.pack.js',
  37. 'resource/js/crowi.js'
  38. ],
  39. dist: dirs.jsDist + '/crowi.js',
  40. revealSrc: [
  41. 'bower_components/reveal.js/lib/js/head.min.js',
  42. 'bower_components/reveal.js/lib/js/html5shiv.js',
  43. 'bower_components/reveal.js/js/reveal.js'
  44. ],
  45. revealDist: dirs.jsDist + '/crowi-reveal.js',
  46. clientWatch: ['resource/js/**/*.js'],
  47. watch: ['test/**/*.test.js', 'app.js', 'lib/**/*.js'],
  48. lint: ['app.js', 'lib/**/*.js'],
  49. tests: tests.watch,
  50. };
  51. var cssIncludePaths = [
  52. 'bower_components/bootstrap-sass-official/assets/stylesheets',
  53. 'bower_components/fontawesome/scss',
  54. 'bower_components/reveal.js/css'
  55. ];
  56. gulp.task('js:concat', function() {
  57. gulp.src(js.revealSrc)
  58. .pipe(concat('crowi-reveal.js'))
  59. .pipe(gulp.dest(dirs.jsDist));
  60. return gulp.src(js.src)
  61. .pipe(concat('crowi.js'))
  62. .pipe(gulp.dest(dirs.jsDist));
  63. });
  64. gulp.task('js:min', ['js:concat'], function() {
  65. gulp.src(js.revealDist)
  66. .pipe(uglify())
  67. .pipe(rename({suffix: '.min'}))
  68. .pipe(gulp.dest(dirs.jsDist));
  69. return gulp.src(js.dist)
  70. .pipe(uglify())
  71. .pipe(rename({suffix: '.min'}))
  72. .pipe(gulp.dest(dirs.jsDist));
  73. });
  74. gulp.task('jshint', function() {
  75. return gulp.src(js.lint)
  76. .pipe(jshint())
  77. .pipe(jshint.reporter(stylish));
  78. });
  79. gulp.task('test', function() {
  80. return gulp.src(js.tests)
  81. .pipe(mocha({
  82. r: 'test/bootstrap.js',
  83. globals: ['chai'],
  84. R: 'dot',
  85. }));
  86. });
  87. gulp.task('css:sass', function() {
  88. return gulp.src(css.src)
  89. .pipe(sass({
  90. outputStyle: 'nesed',
  91. sourceComments: 'map',
  92. includePaths: cssIncludePaths
  93. }).on('error', sass.logError))
  94. .pipe(rename({suffix: '-main'}))
  95. .pipe(gulp.dest(dirs.cssDist));
  96. });
  97. gulp.task('css:concat', ['css:sass'], function() {
  98. return gulp.src([css.main, 'bower_components/highlightjs/styles/tomorrow-night.css'])
  99. .pipe(concat('crowi.css'))
  100. .pipe(gulp.dest(dirs.cssDist))
  101. });
  102. gulp.task('css:min', ['css:concat'], function() {
  103. return gulp.src(css.dist)
  104. .pipe(cssmin())
  105. .pipe(rename({suffix: '.min'}))
  106. .pipe(gulp.dest(dirs.cssDist));
  107. });
  108. gulp.task('watch', function() {
  109. var watchLogger = function(event) {
  110. console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
  111. };
  112. var cssWatcher = gulp.watch(css.watch, ['css:concat']);
  113. cssWatcher.on('change', watchLogger);
  114. var jsWatcher = gulp.watch(js.clientWatch, ['js:concat']);
  115. jsWatcher.on('change', watchLogger);
  116. var testWatcher = gulp.watch(js.watch, ['test']);
  117. testWatcher.on('change', watchLogger);
  118. });
  119. gulp.task('css', ['css:sass', 'css:concat',]);
  120. gulp.task('default', ['css:min', 'js:min',]);
  121. gulp.task('dev', ['css:concat', 'js:concat','jshint', 'test']);