gulpfile.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. 'use strict'
  2. const gulp = require('gulp')
  3. const watch = require('gulp-watch')
  4. const merge = require('merge-stream')
  5. const babel = require('gulp-babel')
  6. const uglify = require('gulp-uglify')
  7. const concat = require('gulp-concat')
  8. const nodemon = require('gulp-nodemon')
  9. const plumber = require('gulp-plumber')
  10. const zip = require('gulp-zip')
  11. const tar = require('gulp-tar')
  12. const gzip = require('gulp-gzip')
  13. const sass = require('gulp-sass')
  14. const cleanCSS = require('gulp-clean-css')
  15. const include = require('gulp-include')
  16. const run = require('run-sequence')
  17. /**
  18. * Paths
  19. *
  20. * @type {Object}
  21. */
  22. const paths = {
  23. scripts: {
  24. combine: [
  25. './node_modules/socket.io-client/dist/socket.io.min.js',
  26. './node_modules/jquery/dist/jquery.min.js',
  27. './node_modules/vue/dist/vue.min.js',
  28. './node_modules/vee-validate/dist/vee-validate.min.js',
  29. './node_modules/axios/dist/axios.min.js',
  30. './node_modules/jquery-smooth-scroll/jquery.smooth-scroll.min.js',
  31. './node_modules/jquery-simple-upload/simpleUpload.min.js',
  32. './node_modules/jquery-contextmenu/dist/jquery.contextMenu.min.js',
  33. './node_modules/sticky-js/dist/sticky.min.js',
  34. './node_modules/simplemde/dist/simplemde.min.js',
  35. './node_modules/ace-builds/src-min-noconflict/ace.js',
  36. './node_modules/ace-builds/src-min-noconflict/ext-modelist.js',
  37. './node_modules/ace-builds/src-min-noconflict/mode-markdown.js',
  38. './node_modules/ace-builds/src-min-noconflict/theme-tomorrow_night.js',
  39. './node_modules/filesize.js/dist/filesize.min.js',
  40. './node_modules/lodash/lodash.min.js'
  41. ],
  42. ace: [
  43. './node_modules/ace-builds/src-min-noconflict/mode-*.js',
  44. '!./node_modules/ace-builds/src-min-noconflict/mode-markdown.js'
  45. ],
  46. compile: [
  47. './client/js/*.js'
  48. ],
  49. watch: [
  50. './client/js/**/*.js'
  51. ]
  52. },
  53. css: {
  54. combine: [
  55. './node_modules/highlight.js/styles/tomorrow.css',
  56. './node_modules/simplemde/dist/simplemde.min.css'
  57. ],
  58. compile: [
  59. './client/scss/*.scss'
  60. ],
  61. includes: [
  62. './node_modules/requarks-core' //! MUST BE LAST
  63. ],
  64. watch: [
  65. './client/scss/**/*.scss',
  66. '../core/core-client/scss/**/*.scss'
  67. ]
  68. },
  69. fonts: [
  70. '../node_modules/requarks-core/core-client/fonts/**/*' //! MUST BE LAST
  71. ],
  72. deploy: [
  73. './**/*',
  74. '!client/js', '!client/js/**',
  75. '!client/scss', '!client/scss/**',
  76. '!coverage', '!coverage/**',
  77. '!data', '!data/**',
  78. '!dist', '!dist/**',
  79. '!node_modules', '!node_modules/**',
  80. '!npm', '!npm/**',
  81. '!repo', '!repo/**',
  82. '!test', '!test/**',
  83. '!gulpfile.js', '!config.yml'
  84. ]
  85. }
  86. /**
  87. * TASK - Starts server in development mode
  88. */
  89. gulp.task('server', ['scripts', 'css', 'fonts'], function () {
  90. nodemon({
  91. script: './server',
  92. ignore: ['assets/', 'client/', 'data/', 'repo/', 'tests/'],
  93. ext: 'js json',
  94. env: { 'NODE_ENV': 'development' }
  95. })
  96. })
  97. gulp.task('configure', ['scripts', 'css', 'fonts'], function () {
  98. nodemon({
  99. exec: 'node wiki configure',
  100. ignore: ['assets/', 'client/', 'data/', 'repo/', 'tests/'],
  101. ext: 'js json',
  102. env: { 'NODE_ENV': 'development' }
  103. })
  104. })
  105. /**
  106. * TASK - Process all scripts processes
  107. */
  108. gulp.task('scripts', ['scripts-libs', 'scripts-app'])
  109. /**
  110. * TASK - Combine js libraries
  111. */
  112. gulp.task('scripts-libs', function () {
  113. return merge(
  114. gulp.src(paths.scripts.combine)
  115. .pipe(concat('libs.js', {newLine: ';\n'}))
  116. .pipe(uglify({ mangle: false }))
  117. .pipe(gulp.dest('./assets/js')),
  118. gulp.src(paths.scripts.ace)
  119. .pipe(gulp.dest('./assets/js/ace'))
  120. )
  121. })
  122. /**
  123. * TASK - Combine, make compatible and compress js app scripts
  124. */
  125. gulp.task('scripts-app', function () {
  126. return gulp.src(paths.scripts.compile)
  127. .pipe(plumber())
  128. .pipe(include({ extensions: 'js' }))
  129. .pipe(babel())
  130. .pipe(uglify())
  131. .pipe(plumber.stop())
  132. .pipe(gulp.dest('./assets/js'))
  133. })
  134. /**
  135. * TASK - Process all css processes
  136. */
  137. gulp.task('css', ['css-libs', 'css-app'])
  138. /**
  139. * TASK - Combine css libraries
  140. */
  141. gulp.task('css-libs', function () {
  142. return gulp.src(paths.css.combine)
  143. .pipe(plumber())
  144. .pipe(concat('libs.css'))
  145. .pipe(cleanCSS({ keepSpecialComments: 0 }))
  146. .pipe(plumber.stop())
  147. .pipe(gulp.dest('./assets/css'))
  148. })
  149. /**
  150. * TASK - Combine app css
  151. */
  152. gulp.task('css-app', function () {
  153. return gulp.src(paths.css.compile)
  154. .pipe(plumber())
  155. .pipe(sass.sync({ includePaths: paths.css.includes }))
  156. .pipe(cleanCSS({ keepSpecialComments: 0 }))
  157. .pipe(plumber.stop())
  158. .pipe(gulp.dest('./assets/css'))
  159. })
  160. /**
  161. * TASK - Copy web fonts
  162. */
  163. gulp.task('fonts', function () {
  164. return gulp.src(paths.fonts)
  165. .pipe(gulp.dest('./assets/fonts'))
  166. })
  167. /**
  168. * TASK - Start dev watchers
  169. */
  170. gulp.task('watch', function () {
  171. return merge(
  172. watch(paths.scripts.watch, {base: './'}, function () { return gulp.start('scripts-app') }),
  173. watch(paths.css.watch, {base: './'}, function () { return gulp.start('css-app') })
  174. )
  175. })
  176. /**
  177. * TASK - Starts development server with watchers
  178. */
  179. gulp.task('default', ['watch', 'server'])
  180. gulp.task('default-configure', ['watch', 'configure'])
  181. gulp.task('dev', function () {
  182. paths.css.includes.pop()
  183. paths.css.includes.push('../core')
  184. paths.fonts.pop()
  185. paths.fonts.push('../core/core-client/fonts/**/*')
  186. return run('default')
  187. })
  188. gulp.task('dev-configure', function () {
  189. paths.css.includes.pop()
  190. paths.css.includes.push('../core')
  191. paths.fonts.pop()
  192. paths.fonts.push('../core/core-client/fonts/**/*')
  193. return run('default-configure')
  194. })
  195. /**
  196. * TASK - Creates deployment packages
  197. */
  198. gulp.task('deploy', ['scripts', 'css', 'fonts'], function () {
  199. var zipStream = gulp.src(paths.deploy)
  200. .pipe(zip('wiki-js.zip'))
  201. .pipe(gulp.dest('dist'))
  202. var targzStream = gulp.src(paths.deploy)
  203. .pipe(tar('wiki-js.tar'))
  204. .pipe(gzip())
  205. .pipe(gulp.dest('dist'))
  206. return merge(zipStream, targzStream)
  207. })