gulpfile.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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 source = require('vinyl-source-stream');
  11. var webpack = require('webpack-stream');
  12. var stylish = require('jshint-stylish');
  13. var pkg = require('./package.json');
  14. var dirs = {
  15. cssSrc: './resource/css',
  16. cssDist: './public/css',
  17. jsSrc: './resource/js',
  18. jsDist: './public/js',
  19. };
  20. var tests = {
  21. watch: ['test/**/*.test.js'],
  22. }
  23. var css = {
  24. src: dirs.cssSrc + '/' + pkg.name + '.scss',
  25. main: dirs.cssDist + '/crowi-main.css',
  26. dist: dirs.cssDist + '/crowi.css',
  27. revealSrc: dirs.cssSrc + '/' + pkg.name + '-reveal.scss',
  28. revealDist: dirs.cssDist + '/crowi-reveal.css',
  29. watch: ['resource/css/*.scss'],
  30. };
  31. var js = {
  32. src: dirs.jsSrc + '/app.js',
  33. dist: dirs.jsDist + '/crowi.js',
  34. admin: dirs.jsDist + '/admin.js',
  35. form: dirs.jsDist + '/form.js',
  36. presentation: dirs.jsDist + '/presentation.js',
  37. app: dirs.jsDist + '/app.js',
  38. clientWatch: ['resource/js/**/*.js'],
  39. watch: ['test/**/*.test.js', 'app.js', 'lib/**/*.js'],
  40. lint: ['app.js', 'lib/**/*.js'],
  41. tests: tests.watch,
  42. };
  43. var cssIncludePaths = [
  44. 'node_modules/bootstrap-sass/assets/stylesheets',
  45. 'node_modules/font-awesome/scss',
  46. 'node_modules/reveal.js/css'
  47. ];
  48. // move task for css and js to webpack over time.
  49. gulp.task('webpack', function() {
  50. return gulp.src(js.src)
  51. .pipe(webpack(require('./webpack.config.js')))
  52. .pipe(gulp.dest(dirs.jsDist));
  53. });
  54. gulp.task('js:min', ['webpack'], function() {
  55. gulp.src(js.presentation)
  56. .pipe(uglify())
  57. .pipe(rename({suffix: '.min'}))
  58. .pipe(gulp.dest(dirs.jsDist));
  59. gulp.src(js.form)
  60. .pipe(uglify())
  61. .pipe(rename({suffix: '.min'}))
  62. .pipe(gulp.dest(dirs.jsDist));
  63. gulp.src(js.admin)
  64. .pipe(uglify())
  65. .pipe(rename({suffix: '.min'}))
  66. .pipe(gulp.dest(dirs.jsDist));
  67. return gulp.src(js.dist)
  68. .pipe(uglify())
  69. .pipe(rename({suffix: '.min'}))
  70. .pipe(gulp.dest(dirs.jsDist));
  71. });
  72. gulp.task('jshint', function() {
  73. return gulp.src(js.lint)
  74. .pipe(jshint())
  75. .pipe(jshint.reporter(stylish));
  76. });
  77. gulp.task('test', function() {
  78. return gulp.src(js.tests)
  79. .pipe(mocha({
  80. r: 'test/bootstrap.js',
  81. globals: ['chai'],
  82. R: 'dot',
  83. }));
  84. });
  85. gulp.task('css:sass', function() {
  86. gulp.src(css.revealSrc) // reveal
  87. .pipe(sass({
  88. outputStyle: 'nesed',
  89. sourceComments: 'map',
  90. includePaths: cssIncludePaths
  91. }).on('error', sass.logError))
  92. .pipe(gulp.dest(dirs.cssDist));
  93. return gulp.src(css.src)
  94. .pipe(sass({
  95. outputStyle: 'nesed',
  96. sourceComments: 'map',
  97. includePaths: cssIncludePaths
  98. }).on('error', sass.logError))
  99. .pipe(rename({suffix: '-main'})) // create -main.css to prepare concating with highlight.js's css
  100. .pipe(gulp.dest(dirs.cssDist));
  101. });
  102. gulp.task('css:concat', ['css:sass'], function() {
  103. return gulp.src([css.main, 'node_modules/highlight.js/styles/tomorrow-night.css'])
  104. .pipe(concat('crowi.css'))
  105. .pipe(gulp.dest(dirs.cssDist))
  106. });
  107. gulp.task('css:min', ['css:concat'], function() {
  108. gulp.src(css.revealDist)
  109. .pipe(cssmin())
  110. .pipe(rename({suffix: '.min'}))
  111. .pipe(gulp.dest(dirs.cssDist));
  112. return gulp.src(css.dist)
  113. .pipe(cssmin())
  114. .pipe(rename({suffix: '.min'}))
  115. .pipe(gulp.dest(dirs.cssDist));
  116. });
  117. gulp.task('watch', function() {
  118. var watchLogger = function(event) {
  119. console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
  120. };
  121. var cssWatcher = gulp.watch(css.watch, ['css:concat']);
  122. cssWatcher.on('change', watchLogger);
  123. var jsWatcher = gulp.watch(js.clientWatch, ['webpack']);
  124. jsWatcher.on('change', watchLogger);
  125. var testWatcher = gulp.watch(js.watch, ['test']);
  126. testWatcher.on('change', watchLogger);
  127. });
  128. gulp.task('css', ['css:sass', 'css:concat',]);
  129. gulp.task('default', ['css:min', 'js:min',]);
  130. gulp.task('dev', ['css:concat', 'webpack', 'jshint', 'test']);