120 lines
2.9 KiB
JavaScript
120 lines
2.9 KiB
JavaScript
import gulp from 'gulp';
|
|
import config from '../config';
|
|
import eslint from 'gulp-eslint';
|
|
import gulpif from 'gulp-if';
|
|
import size from 'gulp-size';
|
|
import plumber from 'gulp-plumber';
|
|
import uglifyjs from 'uglify-js';
|
|
import composer from 'gulp-uglify/composer';
|
|
import gutil from 'gulp-util';
|
|
import notify from 'gulp-notify';
|
|
import notifier from 'node-notifier';
|
|
import babel from 'gulp-babel';
|
|
import handleErrors from './utils/handleErrors';
|
|
import rollup from 'gulp-rollup';
|
|
import header from 'gulp-header';
|
|
import Glob from 'glob-fs';
|
|
import path from 'path';
|
|
import del from 'del';
|
|
|
|
// SCRIPTS
|
|
// ------------------
|
|
gulp.task('lint:scripts', () => {
|
|
return gulp
|
|
.src(`${config.scripts.source}/**/*.js`, {
|
|
base: './',
|
|
since: gulp.lastRun('lint:scripts'),
|
|
})
|
|
.pipe(eslint({fix: true})) // see http://eslint.org/docs/rules/
|
|
.pipe(eslint.format())
|
|
.pipe(gulp.dest('.'));
|
|
});
|
|
|
|
gulp.task('make:scripts', (done) => {
|
|
const uglify = composer(uglifyjs, console);
|
|
const glob = Glob();
|
|
const files = glob.readdirSync(path.join(config.scripts.source, '**/*.js'));
|
|
|
|
const globals = {
|
|
jquery: 'jQuery',
|
|
Component: 'Component',
|
|
Plugin: 'Plugin',
|
|
Config: 'Config',
|
|
GridMenu: "SectionGridMenu",
|
|
Menubar: "SectionMenubar",
|
|
PageAside: "SectionPageAside",
|
|
Sidebar: "SectionSidebar"
|
|
};
|
|
|
|
const external = Object.keys(globals);
|
|
|
|
return gulp
|
|
.src(`${config.scripts.source}/**/*.js`)
|
|
.on('error', handleErrors)
|
|
.pipe(
|
|
plumber({
|
|
errorHandler: notify.onError('Error: <%= error.message %>'),
|
|
})
|
|
)
|
|
.pipe(rollup({
|
|
input: files,
|
|
rollup: require('rollup'),
|
|
allowRealFiles: true,
|
|
output: {
|
|
globals: globals,
|
|
format: 'es'
|
|
},
|
|
external: external,
|
|
}))
|
|
.pipe(babel({
|
|
babelrc: false,
|
|
presets: [
|
|
[
|
|
'@babel/preset-env'
|
|
]
|
|
],
|
|
moduleRoot: '',
|
|
moduleIds: true,
|
|
plugins: [
|
|
["@babel/plugin-transform-modules-umd", {
|
|
"globals": globals
|
|
}],
|
|
"@babel/plugin-proposal-object-rest-spread",
|
|
"@babel/plugin-proposal-class-properties",
|
|
"@babel/plugin-external-helpers"
|
|
]
|
|
}))
|
|
.pipe(gulpif(config.production, uglify()))
|
|
.pipe(gulpif(config.production, header(config.banner)))
|
|
.pipe(size({gzip: true, showFiles: true}))
|
|
.pipe(gulp.dest(`${config.scripts.build}`));
|
|
});
|
|
|
|
gulp.task(
|
|
'scripts',
|
|
gulp.series('lint:scripts', 'make:scripts', (done) => {
|
|
if (config.enable.notify) {
|
|
notifier.notify({
|
|
title: config.notify.title,
|
|
message: 'Scripts task complete',
|
|
});
|
|
}
|
|
|
|
done();
|
|
})
|
|
);
|
|
|
|
// Clean scripts files
|
|
gulp.task('clean:scripts', (done) => {
|
|
return del([`${config.scripts.build}/**/*`]).then(() => {
|
|
if (config.enable.notify) {
|
|
notifier.notify({
|
|
title: config.notify.title,
|
|
message: 'Clean scripts task complete',
|
|
});
|
|
}
|
|
|
|
done();
|
|
});
|
|
});
|