aboutsummaryrefslogtreecommitdiffstats
path: root/gulpfile.js
diff options
context:
space:
mode:
Diffstat (limited to 'gulpfile.js')
-rw-r--r--gulpfile.js130
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`])