You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AdminLTE/gulpfile.js

318 lines
7.7 KiB

4 years ago
/* eslint-disable no-console */
4 years ago
/* eslint-disable camelcase */
/* eslint-disable no-undef */
/* eslint-disable unicorn/prefer-module */
const autoprefix = require('autoprefixer')
4 years ago
const browserSync = require('browser-sync').create()
const del = require('del')
4 years ago
const esbuild = require('esbuild')
const { src, dest, lastRun, watch, series } = require('gulp')
const cleanCss = require('gulp-clean-css')
const dependents = require('gulp-dependents')
const eslint = require('gulp-eslint7')
4 years ago
const fileinclude = require('gulp-file-include')
4 years ago
const npmDist = require('gulp-npm-dist')
const postcss = require('gulp-postcss')
4 years ago
const rename = require('gulp-rename')
4 years ago
const sass = require('gulp-sass')
const gulpStylelint = require('gulp-stylelint')
const rtlcss = require('rtlcss')
4 years ago
sass.compiler = require('sass')
4 years ago
const pkg = require('./package')
const year = new Date().getFullYear()
const banner = `/*!
* AdminLTE v${pkg.version} (${pkg.homepage})
* Copyright 2014-${year} ${pkg.author}
* Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE)
*/`
4 years ago
// Define paths
const paths = {
dist: {
base: './dist/',
css: './dist/css',
4 years ago
js: './dist/js',
4 years ago
html: './dist/pages',
assets: './dist/assets',
img: './dist/assets/img',
vendor: './dist/vendor'
},
base: {
base: './',
node: './node_modules'
},
src: {
base: './src/',
css: './src/css',
html: './src/pages/**/*.html',
assets: './src/assets/**/*.*',
partials: './src/partials/**/*.html',
scss: './src/scss',
4 years ago
ts: './src/ts',
4 years ago
node_modules: './node_modules/',
vendor: './vendor'
},
temp: {
base: './.temp/',
css: './.temp/css',
4 years ago
js: './.temp/js',
4 years ago
html: './.temp/pages',
assets: './.temp/assets',
vendor: './.temp/vendor'
}
}
4 years ago
const sassOptions = {
outputStyle: 'expanded',
includePaths: ['./node_modules/']
}
const postcssOptions = [
autoprefix({ cascade: false })
]
4 years ago
const postcssRtlOptions = [
autoprefix({ cascade: false }),
rtlcss({})
]
// From here Dev mode will Start
4 years ago
4 years ago
// Compile SCSS
4 years ago
const scss = () => {
return src(paths.src.scss + '/adminlte.scss', { sourcemaps: true })
.pipe(sass(sassOptions).on('error', sass.logError))
.pipe(postcss(postcssOptions))
.pipe(dest(paths.temp.css, { sourcemaps: '.' }))
.pipe(browserSync.stream())
}
/**
* Use superScss to build css along with Dark mode
*/
const superScss = () => {
return src(paths.src.scss + '/**/*.scss', {
since: lastRun(scss),
sourcemaps: true
})
.pipe(dependents())
4 years ago
.pipe(sass(sassOptions).on('error', sass.logError))
.pipe(postcss(postcssOptions))
.pipe(dest(paths.temp.css, { sourcemaps: '.' }))
4 years ago
.pipe(browserSync.stream())
}
// Lint SCSS
const lintScss = () => {
return src([paths.src.scss + '/**/*.scss'], { since: lastRun(lintScss) })
.pipe(gulpStylelint({
failAfterError: false,
4 years ago
reporters: [
{ formatter: 'string', console: true }
]
4 years ago
}))
}
4 years ago
4 years ago
const ts = () => {
4 years ago
return esbuild.build({
entryPoints: [paths.src.ts + '/adminlte.ts'],
banner: {
js: banner
},
bundle: true,
format: 'iife',
sourcemap: true,
target: ['chrome60'],
outfile: paths.temp.js + '/adminlte.js'
}).catch(
error => console.error(error)
)
4 years ago
}
4 years ago
4 years ago
// Lint TS
const lintTs = () => {
return src([paths.src.ts + '/**/*.ts'], { since: lastRun(lintTs) })
.pipe(eslint())
.pipe(eslint.format())
4 years ago
}
const index = () => {
return src([paths.src.base + '*.html'])
.pipe(fileinclude({
prefix: '@@',
basepath: './src/partials/',
context: {
environment: 'development'
}
}))
.pipe(dest(paths.temp.base))
.pipe(browserSync.stream())
}
4 years ago
4 years ago
const html = () => {
return src([paths.src.html])
.pipe(fileinclude({
prefix: '@@',
basepath: './src/partials/',
context: {
environment: 'development'
}
}))
.pipe(dest(paths.temp.html))
.pipe(browserSync.stream())
}
4 years ago
4 years ago
const assets = () => {
return src([paths.src.assets])
.pipe(dest(paths.temp.assets))
.pipe(browserSync.stream())
}
4 years ago
4 years ago
const vendor = () => {
return src(npmDist({ copyUnminified: true }), { base: paths.src.node_modules })
.pipe(dest(paths.temp.vendor))
}
4 years ago
4 years ago
const serve = () => {
4 years ago
browserSync.init({
server: paths.temp.base
})
watch([paths.src.scss], { delay: 500 }, series(lintScss, scss))
watch([paths.src.ts], series(lintTs, ts))
4 years ago
watch([paths.src.html, paths.src.base + '*.html', paths.src.partials], series(html, index))
watch([paths.src.assets], series(assets))
watch([paths.src.vendor], series(vendor))
}
4 years ago
const superServe = () => {
browserSync.init({
server: paths.temp.base
})
watch([paths.src.scss], { delay: 500 }, series(lintScss, superScss))
watch([paths.src.ts], series(lintTs, ts))
watch([paths.src.html, paths.src.base + '*.html', paths.src.partials], series(html, index))
watch([paths.src.assets], series(assets))
watch([paths.src.vendor], series(vendor))
}
// From here Dist will Start
4 years ago
// Minify CSS
4 years ago
const minifyDistCss = () => {
return src([
4 years ago
paths.dist.css + '/**/*.css'
], {
base: paths.dist.css,
sourcemaps: true
})
.pipe(cleanCss({ format: { breakWith: 'lf' } }))
4 years ago
.pipe(rename({ suffix: '.min' }))
.pipe(dest(paths.dist.css, { sourcemaps: '.' }))
4 years ago
}
4 years ago
4 years ago
// Minify JS
4 years ago
const minifyDistJs = () => {
4 years ago
return esbuild.build({
entryPoints: [paths.dist.js + '/adminlte.js'],
format: 'iife',
minify: true,
sourcemap: true,
target: ['chrome60'],
outfile: paths.dist.js + '/adminlte.min.js'
}).catch(
error => console.error(error)
)
4 years ago
}
4 years ago
4 years ago
// Copy assets
4 years ago
const copyDistAssets = () => {
return src(paths.src.assets)
.pipe(dest(paths.dist.assets))
}
4 years ago
// Clean
const cleanDist = () => del([paths.dist.base])
4 years ago
// Compile and copy all scss/css
const copyDistCssAll = () => {
return src([paths.src.scss + '/**/*.scss'], {
base: paths.src.scss,
sourcemaps: true
})
4 years ago
.pipe(sass(sassOptions).on('error', sass.logError))
.pipe(postcss(postcssOptions))
.pipe(dest(paths.dist.css, { sourcemaps: '.' }))
4 years ago
}
4 years ago
4 years ago
const copyDistCssRtl = () => {
return src(paths.dist.css + '/*.css', { sourcemaps: true })
4 years ago
.pipe(postcss(postcssRtlOptions))
.pipe(rename({ suffix: '.rtl' }))
.pipe(dest(paths.dist.css + '/rtl', { sourcemaps: '.' }))
4 years ago
}
4 years ago
// Compile and copy ts/js
4 years ago
const copyDistJs = () => {
4 years ago
return esbuild.build({
entryPoints: [paths.src.ts + '/adminlte.ts'],
banner: {
js: banner
},
bundle: true,
format: 'iife',
sourcemap: true,
target: ['chrome60'],
outfile: paths.dist.js + '/adminlte.js'
}).catch(
error => console.error(error)
)
4 years ago
}
4 years ago
4 years ago
// Copy Html
4 years ago
const copyDistHtml = () => {
return src([paths.src.html])
.pipe(fileinclude({
prefix: '@@',
basepath: './src/partials/',
context: {
environment: 'production'
}
}))
.pipe(dest(paths.dist.html))
}
4 years ago
// Copy index
4 years ago
const copyDistHtmlIndex = () => {
return src([paths.src.base + '*.html'])
.pipe(fileinclude({
prefix: '@@',
basepath: './src/partials/',
context: {
environment: 'production'
}
}))
.pipe(dest(paths.dist.base))
}
4 years ago
// Copy node_modules to vendor
4 years ago
const copyDistVendor = () => {
return src(npmDist({ copyUnminified: true }), { base: paths.src.node_modules })
.pipe(dest(paths.dist.vendor))
}
4 years ago
// To Dist Before release
exports.build = series(lintScss, lintTs, cleanDist, copyDistCssAll, copyDistCssRtl, minifyDistCss, copyDistJs, minifyDistJs, copyDistHtml, copyDistHtmlIndex, copyDistAssets, copyDistVendor)
4 years ago
// Default - Only for light mode AdminLTE
exports.default = series(scss, ts, html, index, assets, vendor, serve)
// Super Dev mode for Dark anf Light mode
exports.super = series(superScss, ts, html, index, assets, vendor, superServe)