scripts.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import gulp from 'gulp';
  2. import config from '../config';
  3. import eslint from 'gulp-eslint';
  4. import gulpif from 'gulp-if';
  5. import size from 'gulp-size';
  6. import plumber from 'gulp-plumber';
  7. import uglifyjs from 'uglify-js';
  8. import composer from 'gulp-uglify/composer';
  9. import gutil from 'gulp-util';
  10. import notify from 'gulp-notify';
  11. import notifier from 'node-notifier';
  12. import babel from 'gulp-babel';
  13. import handleErrors from './utils/handleErrors';
  14. import rollup from 'gulp-rollup';
  15. import header from 'gulp-header';
  16. import Glob from 'glob-fs';
  17. import path from 'path';
  18. import del from 'del';
  19. // SCRIPTS
  20. // ------------------
  21. gulp.task('lint:scripts', () => {
  22. return gulp
  23. .src(`${config.scripts.source}/**/*.js`, {
  24. base: './',
  25. since: gulp.lastRun('lint:scripts'),
  26. })
  27. .pipe(eslint({fix: true})) // see http://eslint.org/docs/rules/
  28. .pipe(eslint.format())
  29. .pipe(gulp.dest('.'));
  30. });
  31. gulp.task('make:scripts', (done) => {
  32. const uglify = composer(uglifyjs, console);
  33. const glob = Glob();
  34. const files = glob.readdirSync(path.join(config.scripts.source, '**/*.js'));
  35. const globals = {
  36. jquery: 'jQuery',
  37. Component: 'Component',
  38. Plugin: 'Plugin',
  39. Config: 'Config',
  40. GridMenu: "SectionGridMenu",
  41. Menubar: "SectionMenubar",
  42. PageAside: "SectionPageAside",
  43. Sidebar: "SectionSidebar"
  44. };
  45. const external = Object.keys(globals);
  46. return gulp
  47. .src(`${config.scripts.source}/**/*.js`)
  48. .on('error', handleErrors)
  49. .pipe(
  50. plumber({
  51. errorHandler: notify.onError('Error: <%= error.message %>'),
  52. })
  53. )
  54. .pipe(rollup({
  55. input: files,
  56. // rollup: require('rollup'),
  57. allowRealFiles: true,
  58. output: {
  59. globals: globals,
  60. format: 'es'
  61. },
  62. external: external,
  63. }))
  64. .pipe(babel({
  65. babelrc: false,
  66. presets: [
  67. [
  68. '@babel/preset-env'
  69. ]
  70. ],
  71. moduleRoot: '',
  72. moduleIds: true,
  73. plugins: [
  74. ["@babel/plugin-transform-modules-umd", {
  75. "globals": globals
  76. }],
  77. "@babel/plugin-proposal-object-rest-spread",
  78. "@babel/plugin-proposal-class-properties",
  79. "@babel/plugin-external-helpers"
  80. ]
  81. }))
  82. .pipe(gulpif(config.production, uglify()))
  83. .pipe(gulpif(config.production, header(config.banner)))
  84. .pipe(size({gzip: true, showFiles: true}))
  85. .pipe(gulp.dest(`${config.scripts.build}`));
  86. });
  87. gulp.task(
  88. 'scripts',
  89. gulp.series('lint:scripts', 'make:scripts', (done) => {
  90. if (config.enable.notify) {
  91. notifier.notify({
  92. title: config.notify.title,
  93. message: 'Scripts task complete',
  94. });
  95. }
  96. done();
  97. })
  98. );
  99. // Clean scripts files
  100. gulp.task('clean:scripts', (done) => {
  101. return del([`${config.scripts.build}/**/*`]).then(() => {
  102. if (config.enable.notify) {
  103. notifier.notify({
  104. title: config.notify.title,
  105. message: 'Clean scripts task complete',
  106. });
  107. }
  108. done();
  109. });
  110. });