MCUT_Supervisor/N4JS/Arena/H/demo/global/tasks/scripts.js
2025-03-26 10:38:33 +08:00

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();
});
});