2
0

gulpfile.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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 browserify = require('browserify');
  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. browserify: {
  33. crowi: 'resource/js/crowi.js', // => crowi-bundled.js
  34. crowiPresentation: 'resource/js/crowi-presentation.js', // => crowi-presentation.js
  35. },
  36. src: [
  37. 'node_modules/jquery/dist/jquery.js',
  38. 'node_modules/bootstrap-sass/assets/javascripts/bootstrap.js',
  39. 'node_modules/inline-attachment/src/inline-attachment.js',
  40. 'node_modules/socket.io-client/socket.io.js',
  41. 'node_modules/jquery.cookie/jquery.cookie.js',
  42. 'node_modules/diff/dist/diff.js',
  43. 'resource/thirdparty-js/jquery.selection.js',
  44. dirs.jsDist + '/crowi-bundled.js',
  45. ],
  46. dist: dirs.jsDist + '/crowi.js',
  47. revealSrc: [
  48. 'node_modules/reveal.js/lib/js/head.min.js',
  49. 'node_modules/reveal.js/lib/js/html5shiv.js',
  50. dirs.jsDist + '/crowi-presentation.js',
  51. ],
  52. revealDist: dirs.jsDist + '/crowi-reveal.js',
  53. formSrc: [
  54. 'resource/js/crowi-form.js'
  55. ],
  56. formDist: dirs.jsDist + '/crowi-form.js',
  57. adminSrc: [
  58. 'resource/js/crowi-admin.js'
  59. ],
  60. adminDist: dirs.jsDist + '/crowi-admin.js',
  61. clientWatch: ['resource/js/**/*.js'],
  62. watch: ['test/**/*.test.js', 'app.js', 'lib/**/*.js'],
  63. lint: ['app.js', 'lib/**/*.js'],
  64. tests: tests.watch,
  65. };
  66. var cssIncludePaths = [
  67. 'node_modules/bootstrap-sass/assets/stylesheets',
  68. 'node_modules/font-awesome/scss',
  69. 'node_modules/reveal.js/css'
  70. ];
  71. gulp.task('js:browserify', function() {
  72. browserify({entries: js.browserify.crowiPresentation})
  73. .bundle()
  74. .pipe(source('crowi-presentation.js'))
  75. .pipe(gulp.dest(dirs.jsDist));
  76. return browserify({entries: js.browserify.crowi})
  77. .bundle()
  78. .pipe(source('crowi-bundled.js'))
  79. .pipe(gulp.dest(dirs.jsDist));
  80. });
  81. gulp.task('js:concat', ['js:browserify'], function() {
  82. gulp.src(js.revealSrc)
  83. .pipe(concat('crowi-reveal.js'))
  84. .pipe(gulp.dest(dirs.jsDist));
  85. gulp.src(js.adminSrc)
  86. .pipe(concat('crowi-admin.js'))
  87. .pipe(gulp.dest(dirs.jsDist));
  88. gulp.src(js.formSrc)
  89. .pipe(concat('crowi-form.js'))
  90. .pipe(gulp.dest(dirs.jsDist));
  91. return gulp.src(js.src)
  92. .pipe(concat('crowi.js'))
  93. .pipe(gulp.dest(dirs.jsDist));
  94. });
  95. gulp.task('js:min', ['js:concat'], function() {
  96. gulp.src(js.revealDist)
  97. .pipe(uglify())
  98. .pipe(rename({suffix: '.min'}))
  99. .pipe(gulp.dest(dirs.jsDist));
  100. gulp.src(js.formDist)
  101. .pipe(uglify())
  102. .pipe(rename({suffix: '.min'}))
  103. .pipe(gulp.dest(dirs.jsDist));
  104. gulp.src(js.adminDist)
  105. .pipe(uglify())
  106. .pipe(rename({suffix: '.min'}))
  107. .pipe(gulp.dest(dirs.jsDist));
  108. return gulp.src(js.dist)
  109. .pipe(uglify())
  110. .pipe(rename({suffix: '.min'}))
  111. .pipe(gulp.dest(dirs.jsDist));
  112. });
  113. gulp.task('jshint', function() {
  114. return gulp.src(js.lint)
  115. .pipe(jshint())
  116. .pipe(jshint.reporter(stylish));
  117. });
  118. gulp.task('test', function() {
  119. return gulp.src(js.tests)
  120. .pipe(mocha({
  121. r: 'test/bootstrap.js',
  122. globals: ['chai'],
  123. R: 'dot',
  124. }));
  125. });
  126. gulp.task('css:sass', function() {
  127. gulp.src(css.revealSrc) // reveal
  128. .pipe(sass({
  129. outputStyle: 'nesed',
  130. sourceComments: 'map',
  131. includePaths: cssIncludePaths
  132. }).on('error', sass.logError))
  133. .pipe(gulp.dest(dirs.cssDist));
  134. return gulp.src(css.src)
  135. .pipe(sass({
  136. outputStyle: 'nesed',
  137. sourceComments: 'map',
  138. includePaths: cssIncludePaths
  139. }).on('error', sass.logError))
  140. .pipe(rename({suffix: '-main'})) // create -main.css to prepare concating with highlight.js's css
  141. .pipe(gulp.dest(dirs.cssDist));
  142. });
  143. gulp.task('css:concat', ['css:sass'], function() {
  144. return gulp.src([css.main, 'node_modules/highlight.js/styles/tomorrow-night.css'])
  145. .pipe(concat('crowi.css'))
  146. .pipe(gulp.dest(dirs.cssDist))
  147. });
  148. gulp.task('css:min', ['css:concat'], function() {
  149. gulp.src(css.revealDist)
  150. .pipe(cssmin())
  151. .pipe(rename({suffix: '.min'}))
  152. .pipe(gulp.dest(dirs.cssDist));
  153. return gulp.src(css.dist)
  154. .pipe(cssmin())
  155. .pipe(rename({suffix: '.min'}))
  156. .pipe(gulp.dest(dirs.cssDist));
  157. });
  158. gulp.task('watch', function() {
  159. var watchLogger = function(event) {
  160. console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
  161. };
  162. var cssWatcher = gulp.watch(css.watch, ['css:concat']);
  163. cssWatcher.on('change', watchLogger);
  164. var jsWatcher = gulp.watch(js.clientWatch, ['js:concat']);
  165. jsWatcher.on('change', watchLogger);
  166. var testWatcher = gulp.watch(js.watch, ['test']);
  167. testWatcher.on('change', watchLogger);
  168. });
  169. gulp.task('css', ['css:sass', 'css:concat',]);
  170. gulp.task('default', ['css:min', 'js:min',]);
  171. gulp.task('dev', ['css:concat', 'js:concat','jshint', 'test']);