gulpfile.babel.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. /**
  2. * ------------------------------------------------------
  3. * easy form generator — gulpfile —
  4. * ------------------------------------------------------
  5. *
  6. * INFO on relevant tasks :
  7. * -------------------------
  8. *
  9. * 1) want to build "only app dependencies"" (only), use :
  10. * - $ gulp
  11. * - $ gulp watch
  12. *
  13. * 2) want to build "all dependencies" (vendor + app), use :
  14. * - $ gulp build:all
  15. *
  16. * 3) want to dist, use :
  17. * - $ gulp dist
  18. * ——————————————————————————————————————————————
  19. * MIT (2015) - Erwan Datin (MacKentoch)
  20. * https://github.com/MacKentoch/easyFormGenerator
  21. * ——————————————————————————————————————————————
  22. **/
  23. 'use strict';
  24. import gulp from 'gulp';
  25. import del from 'del';
  26. import eslint from 'gulp-eslint';
  27. import concat from 'gulp-concat';
  28. import cssmin from 'gulp-cssmin';
  29. import sass from 'gulp-sass';
  30. import notify from 'gulp-notify';
  31. import wrap from 'gulp-wrap';
  32. import deleteLines from 'gulp-delete-lines';
  33. import rename from 'gulp-rename';
  34. import childProcess from 'child_process';
  35. const exec = childProcess.exec;
  36. /**
  37. * ////////////////////////////////////////////////////////////////
  38. * CONFIGS
  39. * ////////////////////////////////////////////////////////////////
  40. */
  41. import gulpConfig from './src/gulp/gulpConfig';
  42. /**
  43. * ------------------
  44. * CLEANING TASKS :
  45. * ------------------
  46. * - dist (all)
  47. * - public (all)
  48. * - public (only stepway)
  49. * - public (only dragdropway)
  50. */
  51. // clean all dist
  52. gulp.task('dist:clean', cb => del([`${gulpConfig.base.distDir}**/*`], cb));
  53. //clean all public : NOT USED -> use other cleaning tasks (safer)
  54. gulp.task('public:clean', cb => del([`${gulpConfig.base.publicDir}**/*`], cb));
  55. //clean all vendor css : public dir
  56. gulp.task('public:vendor:css:clean', cb => del([gulpConfig.base.root + gulpConfig.destDirs.vendor.css + '/**/*.css'], cb));
  57. //clean all vendor js : public dir
  58. gulp.task('public:vendor:js:clean', cb => del([gulpConfig.base.root + gulpConfig.destDirs.vendor.js + '/**/*.js'], cb));
  59. //clean all vendor fonts : public dir
  60. gulp.task('public:vendor:fonts:clean', cb => del([gulpConfig.base.root + gulpConfig.destDirs.vendor.fonts + '/**/*'], cb));
  61. //clean public : stepway
  62. gulp.task('stepway:clean', cb => {
  63. del([
  64. gulpConfig.base.publicDir + 'js/' + gulpConfig.destFiles.app.stepway.js,
  65. gulpConfig.base.publicDir + 'css/' + gulpConfig.destFiles.app.stepway.css
  66. ], cb);
  67. });
  68. //clean public : dragdropway
  69. gulp.task('dragdropway:clean', cb => {
  70. del([
  71. gulpConfig.base.publicDir + 'js/' + gulpConfig.destFiles.app.dragAndDropWay.js,
  72. gulpConfig.base.publicDir + 'css/' + gulpConfig.destFiles.app.dragAndDropWay.css
  73. ], cb);
  74. });
  75. //clean public : formviewer
  76. gulp.task('formviewer:clean', cb => {
  77. del([
  78. gulpConfig.base.publicDir + 'js/' + gulpConfig.destFiles.app.formViewer.js,
  79. gulpConfig.base.publicDir + 'css/' + gulpConfig.destFiles.app.formViewer.css
  80. ], cb);
  81. });
  82. /**
  83. * -------------------------------
  84. * VENDORS CSS TASKS
  85. * -------------------------------
  86. */
  87. //vendor:css subtask
  88. gulp.task('vendor:css:specialCases',
  89. ['public:vendor:css:clean'],
  90. () => {
  91. gulp.src(gulpConfig.srcFiles.bowerFiles.css.toMinify.srcFile, { cwd: gulpConfig.base.root })
  92. .pipe(concat(gulpConfig.srcFiles.bowerFiles.css.toMinify.destfileName))
  93. .pipe(cssmin())
  94. //.pipe(gulp.dest(gulpConfig.srcFiles.bowerFiles.css.minifyInThisDir, { cwd: gulpConfig.base.root }))
  95. .pipe(gulp.dest(gulpConfig.destDirs.vendor.css, { cwd: gulpConfig.base.root }));
  96. gulp.src(gulpConfig.srcFiles.bowerFiles.css.toCleanAndMinify.srcFile, { cwd: gulpConfig.base.root })
  97. .pipe(deleteLines({ 'filters': [/^@import url/] }))
  98. .pipe(concat(gulpConfig.srcFiles.bowerFiles.css.toCleanAndMinify.destfileName))
  99. .pipe(cssmin())
  100. .on('error', notify.onError(error => 'Error: ' + error.message))
  101. //.pipe(gulp.dest(gulpConfig.srcFiles.bowerFiles.css.minifyInThisDir, { cwd: gulpConfig.base.root }))
  102. .pipe(gulp.dest(gulpConfig.destDirs.vendor.css, { cwd: gulpConfig.base.root }));
  103. });
  104. // vendor:css TASK : css, copyt to public dir
  105. // NOTE : depending 'appConfig.js' : could concat vendor css
  106. gulp.task('vendor:css',
  107. ['vendor:css:specialCases'],
  108. () => {
  109. const sources = gulpConfig.srcFiles.bowerFiles.css.noMinify;
  110. // if(appConfig.concatVendorFiles === true){
  111. // gulp.src( sources
  112. // ,{ cwd: gulpConfig.base.root })
  113. // .pipe(concat(gulpConfig.destFiles.vendor.css))
  114. // .pipe(gulp.dest(gulpConfig.destDirs.vendor.css, { cwd: gulpConfig.base.root }));
  115. // }else{
  116. gulp.src( sources
  117. ,{ cwd: gulpConfig.base.root })
  118. .pipe(gulp.dest(gulpConfig.destDirs.vendor.css, { cwd: gulpConfig.base.root }));
  119. // }
  120. });
  121. /**
  122. * -------------------------------
  123. * VENDORS FONTS COPY TASK
  124. * -------------------------------
  125. */
  126. gulp.task('vendor:fonts',
  127. ['public:vendor:fonts:clean'],
  128. () => {
  129. gulp.src(gulpConfig.srcFiles.bowerFiles.fonts, { cwd: gulpConfig.base.root })
  130. .pipe(gulp.dest(gulpConfig.destDirs.vendor.fonts, { cwd: gulpConfig.base.root }));
  131. });
  132. /**
  133. * ------------------------------------------------------------
  134. * VENDOR JS TASKS (SCRIPTS for HEADER : jquery, angular....)
  135. * ------------------------------------------------------------
  136. *
  137. * NOTE these vendor js never concatenate
  138. */
  139. gulp.task('vendor:header:js',
  140. ['public:vendor:js:clean'],
  141. () => {
  142. gulp.src( gulpConfig.srcFiles.bowerFiles.js.noConcat, { cwd: gulpConfig.base.root })
  143. .pipe(gulp.dest(gulpConfig.destDirs.vendor.js, { cwd: gulpConfig.base.root }));
  144. });
  145. /**
  146. * ------------------------------------------------------------
  147. * VENDOR JS TASKS (SCRIPTS for FOOTER and concatenable)
  148. * ------------------------------------------------------------
  149. *
  150. * NOTE : depending 'appConfig.js' : could concat footer vendor js
  151. */
  152. gulp.task('vendor:footer:js', ['public:vendor:js:clean'], () => {
  153. // if(appConfig.concatVendorFiles === true){
  154. // gulp.src( gulpConfig.srcFiles.bowerFiles.js.toConcat,
  155. // { cwd: gulpConfig.base.root })
  156. // .pipe(concat(gulpConfig.destFiles.vendor.js))
  157. // .pipe(gulp.dest(gulpConfig.destDirs.vendor.js, { cwd: gulpConfig.base.root }));
  158. // }else{
  159. gulp.src( gulpConfig.srcFiles.bowerFiles.js.toConcat,
  160. { cwd: gulpConfig.base.root })
  161. .pipe(gulp.dest(gulpConfig.destDirs.vendor.js, { cwd: gulpConfig.base.root }));
  162. // }
  163. });
  164. /**
  165. * ------------------------------------------------------------
  166. * VENDOR JS TASKS (combine all vendor js tasks)
  167. * ------------------------------------------------------------
  168. */
  169. gulp.task('vendor:js', ['vendor:header:js','vendor:footer:js']);
  170. /**
  171. * ------------------------------------------------------------
  172. * VENDOR MAP TASKS
  173. * ------------------------------------------------------------
  174. */
  175. gulp.task('vendor:map', () => {
  176. gulp
  177. .src( gulpConfig.srcFiles.bowerFiles.maps, { cwd: gulpConfig.base.root })
  178. .pipe(gulp.dest(gulpConfig.destDirs.vendor.js, { cwd: gulpConfig.base.root }));
  179. });
  180. /**
  181. * -------------------------------
  182. * APP SASS TASKS (STEPWAY)
  183. * -------------------------------
  184. */
  185. //sass : stepway
  186. gulp.task('app:sass:stepway',
  187. ['stepway:clean'],
  188. () => {
  189. //minified
  190. gulp.src(gulpConfig.srcFiles.app.stepway.sass, { cwd: gulpConfig.base.root })
  191. .pipe(sass().on('error', notify.onError(error => 'Error: ' + error.message)))
  192. .pipe(concat(gulpConfig.destFiles.app.stepway.css))
  193. .pipe(cssmin())
  194. .pipe(wrap(gulpConfig.decorate.stepway.templateCSS))
  195. .pipe(rename({extname: '.min.css'}))
  196. .pipe(gulp.dest(gulpConfig.destDirs.app.css, { cwd: gulpConfig.base.root }));
  197. //not minified
  198. gulp.src(gulpConfig.srcFiles.app.stepway.sass, { cwd: gulpConfig.base.root })
  199. .pipe(sass().on('error', notify.onError(error => 'Error: ' + error.message)))
  200. .pipe(concat(gulpConfig.destFiles.app.stepway.css))
  201. .pipe(wrap(gulpConfig.decorate.stepway.templateCSS))
  202. .pipe(gulp.dest(gulpConfig.destDirs.app.css, { cwd: gulpConfig.base.root }));
  203. });
  204. /**
  205. * -------------------------------
  206. * APP SASS TASKS (DRAGDROP WAY)
  207. * -------------------------------
  208. */
  209. //sass drag_and_drop
  210. gulp.task('app:sass:dragdropway',
  211. ['dragdropway:clean'],
  212. () => {
  213. //minified
  214. gulp.src(gulpConfig.srcFiles.app.dragAndDropWay.sass, { cwd: gulpConfig.base.root })
  215. .pipe(sass().on('error', notify.onError(error => 'Error: ' + error.message)))
  216. .pipe(concat(gulpConfig.destFiles.app.dragAndDropWay.css))
  217. .pipe(cssmin())
  218. .pipe(rename({extname: '.min.css'}))
  219. .pipe(wrap(gulpConfig.decorate.dragAndDropWay.templateCSS))
  220. .pipe(gulp.dest(gulpConfig.destDirs.app.css, { cwd: gulpConfig.base.root }));
  221. //not minified
  222. gulp.src(gulpConfig.srcFiles.app.dragAndDropWay.sass, { cwd: gulpConfig.base.root })
  223. .pipe(sass().on('error', notify.onError(error => 'Error: ' + error.message)))
  224. .pipe(concat(gulpConfig.destFiles.app.dragAndDropWay.css))
  225. .pipe(wrap(gulpConfig.decorate.dragAndDropWay.templateCSS))
  226. .pipe(gulp.dest(gulpConfig.destDirs.app.css, { cwd: gulpConfig.base.root }));
  227. });
  228. /**
  229. * -------------------------------
  230. * APP SASS TASKS (FORMVIEWER)
  231. * -------------------------------
  232. */
  233. //sass formviewer
  234. gulp.task('app:sass:formviewer',
  235. ['formviewer:clean'],
  236. () => {
  237. //minified
  238. gulp.src(gulpConfig.srcFiles.app.formViewer.sass, { cwd: gulpConfig.base.root })
  239. .pipe(sass().on('error', notify.onError(error => 'Error: ' + error.message)))
  240. .pipe(concat(gulpConfig.destFiles.app.formViewer.css))
  241. .pipe(cssmin())
  242. .pipe(rename({extname: '.min.css'}))
  243. .pipe(wrap(gulpConfig.decorate.formviewer.templateCSS))
  244. .pipe(gulp.dest(gulpConfig.destDirs.app.css, { cwd: gulpConfig.base.root }));
  245. //not minified
  246. gulp.src(gulpConfig.srcFiles.app.formViewer.sass, { cwd: gulpConfig.base.root })
  247. .pipe(sass().on('error', notify.onError(error => 'Error: ' + error.message)))
  248. .pipe(concat(gulpConfig.destFiles.app.formViewer.css))
  249. .pipe(wrap(gulpConfig.decorate.formviewer.templateCSS))
  250. .pipe(gulp.dest(gulpConfig.destDirs.app.css, { cwd: gulpConfig.base.root }));
  251. });
  252. /**
  253. * -------------------------------
  254. * APP JS TASKS (STEP WAY ES6)
  255. * -------------------------------
  256. */
  257. /**
  258. * eslint stepway ES6 - uses .eslintrc file
  259. */
  260. gulp.task('eslint:stepway:es6', () => {
  261. return gulp.src(gulpConfig.srcFiles.app.ES6.stepway.js)
  262. .pipe(eslint({ useEslintrc: true }))
  263. .pipe(eslint.format())
  264. .pipe(eslint.failAfterError());
  265. });
  266. /**
  267. * eslint drag and drop way ES6 - uses .eslintrc file
  268. */
  269. gulp.task('eslint:dragdropway:es6', () => {
  270. return gulp.src(gulpConfig.srcFiles.app.ES6.dragAndDropWay.js)
  271. .pipe(eslint({ useEslintrc: true }))
  272. .pipe(eslint.format())
  273. .pipe(eslint.failAfterError());
  274. });
  275. /**
  276. * eslint form viewer ES6 - uses .eslintrc file
  277. */
  278. gulp.task('eslint:formviewer:es6', () => {
  279. return gulp.src(gulpConfig.srcFiles.app.ES6.formViewer.js)
  280. .pipe(eslint({ useEslintrc: true }))
  281. .pipe(eslint.format())
  282. .pipe(eslint.failAfterError());
  283. });
  284. const stepWaySfxNoMinifyCMD = `jspm bundle-sfx ${gulpConfig.jspm.stepWay.src} ${gulpConfig.jspm.stepWay.bundle}`;
  285. gulp.task('stepWayES6:sfx',
  286. // ['stepway:clean'],
  287. cb => {
  288. exec(stepWaySfxNoMinifyCMD, (err, stdout) => {
  289. cb(err);
  290. /* eslint no-console:0 */
  291. console.log(stdout);
  292. });
  293. });
  294. const stepWaySfxMinifyCMD = `jspm bundle-sfx ${gulpConfig.jspm.stepWay.src} ${gulpConfig.jspm.stepWay.bundleMin} --minify`;
  295. gulp.task('stepWayES6:sfx:min',
  296. // ['stepway:clean'],
  297. cb => {
  298. exec(stepWaySfxMinifyCMD, (err, stdout) => {
  299. cb(err);
  300. console.log(stdout);
  301. });
  302. });
  303. gulp.task('build:stepWay:ES6', [
  304. 'eslint:stepway:es6',
  305. 'stepWayES6:sfx'
  306. ]);
  307. gulp.task('app:js:stepway', [
  308. 'eslint:stepway:es6',
  309. 'stepWayES6:sfx'
  310. ]);
  311. gulp.task('build:stepWay:ES6:min', [
  312. 'eslint:stepway:es6',
  313. 'stepWayES6:sfx:min'
  314. ]);
  315. //drag and drop way
  316. const dragAndDropWaySfxNoMinifyCMD = `jspm bundle-sfx ${gulpConfig.jspm.dragDropWay.src} ${gulpConfig.jspm.dragDropWay.bundle}`;
  317. gulp.task('dragdropway:ES6:sfx',
  318. // ['dragdropway:clean'],
  319. cb => {
  320. exec(dragAndDropWaySfxNoMinifyCMD, (err, stdout) => {
  321. cb(err);
  322. /* eslint no-console:0 */
  323. console.log(stdout);
  324. });
  325. });
  326. const dragAndDropWaySfxMinifyCMD = `jspm bundle-sfx ${gulpConfig.jspm.dragDropWay.src} ${gulpConfig.jspm.dragDropWay.bundleMin} --minify`;
  327. gulp.task('dragdropway:ES6:sfx:min',
  328. // ['dragdropway:clean'],
  329. cb => {
  330. exec(dragAndDropWaySfxMinifyCMD, (err, stdout) => {
  331. cb(err);
  332. /* eslint no-console:0 */
  333. console.log(stdout);
  334. });
  335. });
  336. gulp.task('build:dragdropway:ES6', [
  337. 'eslint:dragdropway:es6',
  338. 'dragdropway:ES6:sfx'
  339. ]);
  340. gulp.task('build:dragdropway:ES6:min', [
  341. 'eslint:dragdropway:es6',
  342. 'dragdropway:ES6:sfx:min'
  343. ]);
  344. //formViewer
  345. const formViewerSfxNoMinifyCMD = `jspm bundle-sfx ${gulpConfig.jspm.formViewer.src} ${gulpConfig.jspm.formViewer.bundle}`;
  346. gulp.task('formViewer:ES6:sfx',
  347. // ['formviewer:clean'],
  348. cb => {
  349. exec(formViewerSfxNoMinifyCMD, (err, stdout) => {
  350. cb(err);
  351. /* eslint no-console:0 */
  352. console.log(stdout);
  353. });
  354. });
  355. const formViewerSfxMinifyCMD = `jspm bundle-sfx ${gulpConfig.jspm.formViewer.src} ${gulpConfig.jspm.formViewer.bundleMin} --minify`;
  356. gulp.task('formViewer:ES6:sfx:min',
  357. // ['formviewer:clean'],
  358. cb => {
  359. exec(formViewerSfxMinifyCMD, (err, stdout) => {
  360. cb(err);
  361. /* eslint no-console:0 */
  362. console.log(stdout);
  363. });
  364. });
  365. gulp.task('build:formViewer:ES6', [
  366. 'eslint:formviewer:es6',
  367. 'formViewer:ES6:sfx'
  368. ]);
  369. gulp.task('app:js:formviewer', [
  370. 'eslint:formviewer:es6',
  371. 'formViewer:ES6:sfx'
  372. ]);
  373. gulp.task('build:formViewer:ES6:min', [
  374. 'eslint:formviewer:es6',
  375. 'formViewer:ES6:sfx:min'
  376. ]);
  377. /**
  378. * -------------------------------
  379. * APP JS TASKS (DRAGDROP WAY)
  380. * -------------------------------
  381. */
  382. /**
  383. * ---------------------------------------------------------
  384. * DEFAULT TASK : 'gulp' command or ctrl+shift+B (in VSCode)
  385. * -> build app only
  386. * ---------------------------------------------------------
  387. */
  388. gulp.task('default', [
  389. //app tasks
  390. 'app:sass:stepway',
  391. 'app:sass:dragdropway',
  392. 'app:sass:formviewer',
  393. 'build:stepWay:ES6',
  394. 'build:dragdropway:ES6',
  395. 'build:formViewer:ES6'
  396. ]);
  397. /**
  398. * ------------------------------------------------------------
  399. * BUILD:ALL TASK : 'gulp build:all' refresh all (vendors + app)
  400. * ------------------------------------------------------------
  401. */
  402. gulp.task('build:all', [
  403. //vendor tasks
  404. 'vendor:css:specialCases',
  405. 'vendor:css',
  406. 'vendor:fonts',
  407. 'vendor:js',
  408. 'vendor:map',
  409. //app tasks
  410. 'app:sass:stepway',
  411. 'app:sass:dragdropway',
  412. 'app:sass:formviewer',
  413. 'build:stepWay:ES6',
  414. 'build:dragdropway:ES6',
  415. 'build:formViewer:ES6'
  416. ], () =>console.info(`building app + vendors.`));
  417. /**
  418. * --------------------------------------------------------------------
  419. * DIST TASK : uglify app js files and copy all public + html into dist
  420. * --------------------------------------------------------------------
  421. */
  422. gulp.task('dist', [
  423. 'dist:copy'
  424. ]);
  425. //public - all content
  426. gulp.task('dist:copy', [
  427. 'build:stepWay:ES6:min',
  428. 'build:dragdropway:ES6:min',
  429. 'build:formViewer:ES6:min'
  430. ], () => {
  431. //all public dir
  432. gulp.src(gulpConfig.base.publicDir + '**/*', {base : './'})
  433. .pipe(gulp.dest(gulpConfig.base.distDir ,{cwd: gulpConfig.base.root}));
  434. const indexHtmlFiles = [
  435. gulpConfig.base.root + gulpConfig.stepWayHtmlFile.name,
  436. gulpConfig.base.root + gulpConfig.dragDropWayHtmlFile.name,
  437. gulpConfig.base.root + gulpConfig.easyFormViewerHtmlFile.name
  438. ];
  439. //html files
  440. gulp.src(indexHtmlFiles)
  441. .pipe(gulp.dest(gulpConfig.base.distDir ,{cwd: gulpConfig.base.root}));
  442. //bower js
  443. gulp.src(gulpConfig.destDirs.app.js + '/*.js', {cwd: gulpConfig.base.root})
  444. .pipe(gulp.dest(gulpConfig.bower.js ,{cwd: gulpConfig.base.distDir}));
  445. //bower css
  446. gulp.src(gulpConfig.destDirs.app.css + '/*.css', {cwd: gulpConfig.base.root})
  447. .pipe(gulp.dest(gulpConfig.bower.css ,{cwd: gulpConfig.base.distDir }));
  448. //textAngular css fix
  449. gulp.src(gulpConfig.srcFiles.app.common.customTextAngularCss, {cwd: gulpConfig.base.root})
  450. .pipe(gulp.dest(gulpConfig.bower.css ,{cwd: gulpConfig.base.distDir }));
  451. });