forum-django/gulpfile.js

111 lines
3.9 KiB
JavaScript

import { deleteAsync } from 'del'
import GulpClient from 'gulp'
import logger from 'fancy-log'
import PluginError from 'plugin-error'
import webpackStream from 'webpack-stream'
import webpack from 'webpack'
import Server from 'webpack-dev-server'
// import path from 'path'
import gulpEslint from 'gulp-eslint-new'
// import { fileURLToPath } from 'url'
import download from 'gulp-download-stream'
const sourceGlob = [
'frontend/src/ts/**/*.js',
'frontend/src/**/*.ts',
'!frontend/src/js/matomo.js'
]
// const _myFileName = fileURLToPath(import.meta.url)
// const _myDirName = path.dirname(_myFileName)
// const htmlReplaceSkeleton = () =>
// GulpClient.src('frontend/src/index.html')
// .pipe(htmlreplace({
// loader: {
// src: null,
// tpl: bundleHelper.createHeader(),
// },
// }))
// .pipe(GulpClient.dest('frontend/dist/'))
// Cleanup task
GulpClient.task('clean', () => deleteAsync(['./frontend/dist/**/*']))
// download-matomo-js task
GulpClient.task('download-matomo-js', () => download(
'https://owa.ksol.io/matomo.js'
)
.pipe(GulpClient.dest('frontend/src/js/'))
)
// Lint Task
if (process.argv.length < 4) {
GulpClient.task('lint', () => GulpClient.src(sourceGlob)
// gulpEslint() attaches the lint output to the "gulpEslint" property
// of the file object so it can be used by other modules.
.pipe(gulpEslint())
// gulpEslint.format() outputs the lint results to the console.
// Alternatively use gulpEslint.formatEach() (see Docs).
.pipe(gulpEslint.format())
// To have the process exit with an error code (1) on
// lint error, return the stream and pipe to failAfterError last.
.pipe(gulpEslint.failAfterError()))
} else if (process.argv[3] === '-n') {
const passedFiles = process.argv[4].split('\n')
GulpClient.task('lint', () => GulpClient.src(passedFiles)
// gulpEslint() attaches the lint output to the "gulpEslint" property
// of the file object so it can be used by other modules.
.pipe(gulpEslint())
// gulpEslint.format() outputs the lint results to the console.
// Alternatively use gulpEslint.formatEach() (see Docs).
.pipe(gulpEslint.format())
// To have the process exit with an error code (1) on
// lint error, return the stream and pipe to failAfterError last.
.pipe(gulpEslint.failAfterError()))
}
GulpClient.task(
'clean-lint',
GulpClient.parallel(['clean', 'lint', 'download-matomo-js']))
GulpClient.task('webpack-prod', GulpClient.series('clean-lint', async (done) => {
const prodConfig = (await import('./frontend/webpack/config.prod.js')).default
GulpClient.src(sourceGlob)
.pipe(webpackStream(prodConfig, webpack))
.on('error', (error) => { done(error) })
.pipe(GulpClient.dest('frontend/dist/assets/'))
.on('end', done)
}))
GulpClient.task('webpack-dev', GulpClient.series(['clean-lint'], async (done) => {
const devConfig = (await import('./frontend/webpack/config.dev.js')).default
GulpClient.src(sourceGlob)
.pipe(webpackStream(devConfig, webpack))
.on('error', (error) => { done(error) })
.pipe(GulpClient.dest('frontend/dist/assets/'))
.on('end', done)
}))
GulpClient.task('build', GulpClient.series(['webpack-prod']))
GulpClient.task('build-dev', GulpClient.series(['clean', 'webpack-dev']))
GulpClient.task(
'webpack-dev-server',
GulpClient.series(['clean', 'download-matomo-js'], async (done) => {
const config = (
await import('./frontend/webpack/config.dev-server.js')).default
const compiler = webpack(config, () => {})
const devServerOptions = config.devServer
const server = new Server(devServerOptions, compiler)
// @See https://webpack.js.org/configuration/dev-server/#usage-via-api
server.startCallback((err) => {
if (err) throw new PluginError('webpack-dev-server', err)
// Server listening
logger('[webpack-dev-server]', `http://${devServerOptions.host}:3000/`)
})
done()
}))
GulpClient.task('default', GulpClient.series('clean-lint'))