filesafe/gulpfile.js
Bobby Wibowo ea37e0b7d3
Updated
Reduced album title max length from 280 to 70.
Existing albums with longer titles will have their titles truncated in
their public pages, but the original titles will still remain in db.

"Load images for preview" will now properly display its saved value.

Increased max parallel uploads to 10.

"yarn develop" will now also restart safe if some Nunjuck templates are
edited (_globals.njk, _layout.njk, and album.njk).

Better meta tags generation.

Bumped v1 version string.
2019-09-19 08:27:19 +07:00

133 lines
2.9 KiB
JavaScript

const gulp = require('gulp')
const cssnano = require('cssnano')
const del = require('del')
const buble = require('gulp-buble')
const eslint = require('gulp-eslint')
const gulpif = require('gulp-if')
const nodemon = require('gulp-nodemon')
const postcss = require('gulp-postcss')
const postcssPresetEnv = require('postcss-preset-env')
const sourcemaps = require('gulp-sourcemaps')
const stylelint = require('gulp-stylelint')
const terser = require('gulp-terser')
// Put built files for development on a Git-ignored directory.
// This will prevent IDE's Git from unnecessarily
// building diff's during development.
const dist = process.env.NODE_ENV === 'development'
? './dist-dev'
: './dist'
/** TASKS: LINT */
gulp.task('lint:js', () => {
return gulp.src('./src/**/*.js', {
ignore: './src/libs/**/*'
})
.pipe(eslint())
.pipe(eslint.failAfterError())
})
gulp.task('lint:css', () => {
return gulp.src('./src/**/*.css', {
ignore: './src/libs/**/*'
})
.pipe(stylelint())
})
gulp.task('lint', gulp.parallel('lint:js', 'lint:css'))
/** TASKS: CLEAN */
gulp.task('clean:css', () => {
return del([
`${dist}/**/*.css`,
`${dist}/**/*.css.map`
])
})
gulp.task('clean:js', () => {
return del([
`${dist}/**/*.js`,
`${dist}/**/*.js.map`
])
})
gulp.task('clean:rest', () => {
return del([
`${dist}/*`
])
})
gulp.task('clean', gulp.parallel('clean:css', 'clean:js', 'clean:rest'))
/** TASKS: BUILD */
gulp.task('build:css', () => {
const plugins = [
postcssPresetEnv()
]
// Minify on production
if (process.env.NODE_ENV !== 'development')
plugins.push(cssnano())
return gulp.src('./src/**/*.css')
.pipe(sourcemaps.init())
.pipe(postcss(plugins))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(dist))
})
gulp.task('build:js', () => {
return gulp.src('./src/**/*.js')
.pipe(sourcemaps.init())
.pipe(buble())
// Minify on production
.pipe(gulpif(process.env.NODE_ENV !== 'development', terser()))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(dist))
})
gulp.task('build', gulp.parallel('build:css', 'build:js'))
gulp.task('default', gulp.series('lint', 'clean', 'build'))
/** TASKS: WATCH (SKIP LINTER) */
gulp.task('watch:css', () => {
return gulp.watch([
'src/**/*.css'
], gulp.series('clean:css', 'build:css'))
})
gulp.task('watch:js', () => {
return gulp.watch([
'src/**/*.js'
], gulp.series('clean:js', 'build:js'))
})
gulp.task('watch:src', gulp.parallel('watch:css', 'watch:js'))
gulp.task('nodemon', done => {
return nodemon({
script: './lolisafe.js',
env: process.env,
watch: [
'lolisafe.js',
'logger.js',
'config.js',
'controllers/',
'database/',
'routes/',
'views/_globals.njk',
'views/_layout.njk',
'views/album.njk'
],
ext: 'js',
done
})
})
gulp.task('watch', gulp.series('clean', 'build', gulp.parallel('watch:src', 'nodemon')))