diff options
Diffstat (limited to 'gulpfile.js')
-rw-r--r-- | gulpfile.js | 130 |
1 files changed, 68 insertions, 62 deletions
diff --git a/gulpfile.js b/gulpfile.js index e7c50b1f..2623ebaf 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -6,48 +6,57 @@ const path = require('path'); const gulp = require('gulp'); - +// ------------------------------------ // JavaScript +// ------------------------------------ const terser = require('gulp-terser'); const rollup = require('gulp-better-rollup'); const babel = require('rollup-plugin-babel'); const commonjs = require('rollup-plugin-commonjs'); const resolve = require('rollup-plugin-node-resolve'); - +// ------------------------------------ // CSS +// ------------------------------------ const sass = require('gulp-sass'); const clean = require('gulp-clean-css'); const prefix = require('gulp-autoprefixer'); - +// ------------------------------------ // Images +// ------------------------------------ const svgstore = require('gulp-svgstore'); const imagemin = require('gulp-imagemin'); - +// ------------------------------------ // Utils +// ------------------------------------ const del = require('del'); const filter = require('gulp-filter'); const header = require('gulp-header'); const gitbranch = require('git-branch'); const rename = require('gulp-rename'); const replace = require('gulp-replace'); +const ansi = require('ansi-colors'); const log = require('fancy-log'); const open = require('gulp-open'); const plumber = require('gulp-plumber'); const size = require('gulp-size'); const sourcemaps = require('gulp-sourcemaps'); const through = require('through2'); - +// ------------------------------------ // Deployment +// ------------------------------------ const aws = require('aws-sdk'); const publish = require('gulp-awspublish'); const FastlyPurge = require('fastly-purge'); - +// ------------------------------------ +// Configs +// ------------------------------------ const pkg = require('./package.json'); const build = require('./build.json'); const deploy = require('./deploy.json'); - +// ------------------------------------ +// Info from package +// ------------------------------------ const { browserslist: browsers, version } = pkg; - const minSuffix = '.min'; // Get AWS config @@ -95,6 +104,7 @@ const paths = { path.join(__dirname, 'dist/*.svg'), path.join(__dirname, `demo/dist/*${minSuffix}.*`), path.join(__dirname, 'demo/dist/*.css'), + path.join(__dirname, 'demo/dist/*.svg'), ], }; @@ -103,32 +113,14 @@ const tasks = { css: [], js: [], sprite: [], - clean: ['clean'], + clean: 'clean', }; // Size plugin const sizeOptions = { showFiles: true, gzip: true }; -// Babel config -const babelrc = (polyfill = false) => ({ - presets: [ - [ - '@babel/preset-env', - { - targets: { - browsers, - }, - useBuiltIns: polyfill ? 'usage' : false, - modules: false, - }, - ], - ], - babelrc: false, - exclude: 'node_modules/**', -}); - // Clean out /dist -gulp.task('clean', done => { +gulp.task(tasks.clean, done => { const dirs = [paths.plyr.output, paths.demo.output].map(dir => path.join(dir, '**/*')); // Don't delete the mp4 @@ -139,30 +131,44 @@ gulp.task('clean', done => { done(); }); -// JAvaScript - -const namespace = 'Plyr'; - +// JavaScript Object.entries(build.js).forEach(([filename, entry]) => { - entry.formats.forEach(format => { + const { dist, formats, namespace, polyfill, src } = entry; + + formats.forEach(format => { const name = `js:${filename}:${format}`; - tasks.js.push(name); - const polyfill = filename.includes('polyfilled'); const extension = format === 'es' ? 'mjs' : 'js'; + tasks.js.push(name); - gulp.task(name, () => { - return gulp - .src(entry.src) + gulp.task(name, () => + gulp + .src(src) .pipe(plumber()) .pipe(sourcemaps.init()) .pipe( rollup( { - plugins: [resolve(), commonjs(), babel(babelrc(polyfill))], + plugins: [ + resolve(), + commonjs(), + babel({ + presets: [ + [ + '@babel/env', + { + // debug: true, + useBuiltIns: polyfill ? 'usage' : false, + corejs: polyfill ? 3 : undefined, + }, + ], + ], + babelrc: false, + exclude: [/\/core-js\//], + }), + ], }, { name: namespace, - // exports: 'named', format, }, ), @@ -173,25 +179,26 @@ Object.entries(build.js).forEach(([filename, entry]) => { extname: `.${extension}`, }), ) - .pipe(gulp.dest(entry.dist)) - .pipe(filter(`**/*${extension}`)) + .pipe(gulp.dest(dist)) + .pipe(filter(`**/*.${extension}`)) .pipe(terser()) .pipe(rename({ suffix: minSuffix })) .pipe(size(sizeOptions)) .pipe(sourcemaps.write('')) - .pipe(gulp.dest(entry.dist)); - }); + .pipe(gulp.dest(dist)), + ); }); }); // CSS Object.entries(build.css).forEach(([filename, entry]) => { + const { dist, src } = entry; const name = `css:${filename}`; tasks.css.push(name); - gulp.task(name, () => { - return gulp - .src(entry.src) + gulp.task(name, () => + gulp + .src(src) .pipe(plumber()) .pipe(sass()) .pipe( @@ -201,27 +208,26 @@ Object.entries(build.css).forEach(([filename, entry]) => { ) .pipe(clean()) .pipe(size(sizeOptions)) - .pipe(gulp.dest(entry.dist)); - }); + .pipe(gulp.dest(dist)), + ); }); // SVG Sprites Object.entries(build.sprite).forEach(([filename, entry]) => { + const { dist, src } = entry; const name = `sprite:${filename}`; tasks.sprite.push(name); - log(path.basename(filename)); - - gulp.task(name, () => { - return gulp - .src(entry.src) + gulp.task(name, () => + gulp + .src(src) .pipe(plumber()) .pipe(imagemin()) .pipe(svgstore()) .pipe(rename({ basename: path.parse(filename).name })) .pipe(size(sizeOptions)) - .pipe(gulp.dest(entry.dist)); - }); + .pipe(gulp.dest(dist)), + ); }); // Build all JS @@ -319,7 +325,7 @@ gulp.task('version', done => { const { domain } = deploy.cdn; - console.log(`Updating versions to '${version}'...`); + log(`Uploading ${ansi.green.bold(version)} to ${ansi.cyan(domain)}...`); // Replace versioned URLs in source const files = ['plyr.js', 'plyr.polyfilled.js', 'config/defaults.js']; @@ -344,7 +350,7 @@ gulp.task('cdn', done => { throw new Error('No publisher instance. Check AWS configuration.'); } - console.log(`Uploading '${version}' to ${domain}...`); + log(`Uploading ${ansi.green.bold(pkg.version)} to ${ansi.cyan(domain)}...`); // Upload to CDN return ( @@ -387,13 +393,13 @@ gulp.task('purge', () => { const purge = new FastlyPurge(fastly.token); list.forEach(url => { - console.log(`Purging ${url}...`); + log(`Purging ${ansi.cyan(url)}...`); purge.url(url, (error, result) => { if (error) { - console.log(error); + log.error(error); } else if (result) { - console.log(result); + log(result); } }); }); @@ -414,7 +420,7 @@ gulp.task('demo', done => { throw new Error('No publisher instance. Check AWS configuration.'); } - console.log(`Uploading '${version}' demo to ${deploy.demo.domain}...`); + log(`Uploading ${ansi.green.bold(pkg.version)} to ${ansi.cyan(domain)}...`); // Replace versioned files in readme.md gulp.src([`${__dirname}/readme.md`]) |