@fantassin/bzk
Version:
Build modern web with Sass, ESNext & WordPress workflow.
63 lines (54 loc) • 1.78 kB
JavaScript
/*
* @title Scripts
* @description A task to concatenate and compress js files via webpack
*/
// Dependencies
const gulp = require('gulp');
const plumber = require('gulp-plumber')
const eslint = require('gulp-eslint');
const gulpIf = require('gulp-if');
const webpack = require('webpack');
const webpackStream = require('webpack-stream');
const webpackConfig = require('../webpack.config');
const named = require('vinyl-named');
const rename = require('gulp-rename');
const dotenv = require('dotenv');
const isProd = require('../gulpfile').isProd;
// Config
dotenv.config();
// Consts
const JS_SRC = process.env.JS_SRC ? process.env.JS_SRC : `${process.env.SRC}/**/*.js`;
const JS_DEST = process.env.JS_DEST ? process.env.JS_DEST : process.env.DEST;
// Tasks
function isFixed(file) {
return file.eslint != null && file.eslint.fixed;
}
function lintScripts() {
return gulp.src(JS_SRC, {base: './', sourcemaps: isProd})
.pipe(eslint({fix: true}))
.pipe(eslint.format())
.pipe(gulpIf(isFixed, gulp.dest('./')));
}
function transpileScripts() {
let tmp = {};
return gulp.src([JS_SRC], {sourcemaps: isProd})
.pipe(plumber())
.pipe(named())
.pipe(rename(function (path) {
tmp[path.basename] = path;
}))
.pipe(webpackStream(webpackConfig, webpack))
.pipe(rename(function (path) {
if (!tmp.hasOwnProperty(path.basename)) {
Object.assign(tmp, {[path.basename]: {dirname: tmp[Object.keys(tmp)[0]].dirname}})
}
if (path.dirname && tmp[path.basename].dirname) {
path.dirname = tmp[path.basename].dirname;
}
}))
.pipe(plumber.stop())
.pipe(gulp.dest(JS_DEST));
}
exports.scripts = gulp.series(lintScripts, transpileScripts);
exports.JS_SRC = JS_SRC;
exports.JS_DEST = JS_DEST;