GithubHelp home page GithubHelp logo

gulp-autopolyfiller's Introduction

gulp-autopolyfiller

NPM version Build Status Coverage Status Dependency Status

Autopolyfiller - Precise polyfills. Automatic and minimal polyfills for your code.

It accepts multiply js files and returns a file with all required polyfills. Please note: all input files will be dropped from the output stream of autopolyfiller. To concat polyfills with all your js files please refer to examples.

Usage

First, install gulp-autopolyfiller as a development dependency:

npm install --save-dev gulp-autopolyfiller

Then, add it to your gulpfile.js:

var autopolyfiller = require('gulp-autopolyfiller');

gulp.task('autopolyfiller', function () {
    return gulp.src('./lib/**/*.js')
        .pipe(autopolyfiller('result_polyfill_file.js'))
        .pipe(gulp.dest('./dist'));
});

API

autopolyfiller(fileName, options)

options.browsers

Type: Array Default value: [] - all browsers

options.include

Type: Array Default value: [] - list of extra polyfills to add

options.exclude

Type: Array Default value: [] - list of polyfills to remove

List of target browsers. Autopolyfiller uses Autoprefixer-style browsers format. See Browsers format for details.

Examples

Basic

Steps:

  • Concat all scripts
  • Generate polyfills
  • Append polyfills
  • Uglify
var gulp = require('gulp');
var concat = require('gulp-concat');
var order = require('gulp-order');
var uglify = require('gulp-uglify');
var autopolyfiller = require('gulp-autopolyfiller');
var merge = require('event-stream').merge;

gulp.task('default', function () {
    // Concat all required js files
    var all = gulp.src('js/*.js')
        .pipe(concat('all.js'));

    // Generate polyfills for all files
    var polyfills = all
        .pipe(autopolyfiller('polyfills.js'));

    // Merge polyfills and all files streams
    return merge(polyfills, all)
        // Order files. NB! polyfills MUST be first
        .pipe(order([
            'polyfills.js',
            'all.js'
        ]))
        // Make single file
        .pipe(concat('all.min.js'))
        // Uglify it
        .pipe(uglify())
        // And finally write `all.min.js` into `build/` dir
        .pipe(gulp.dest('build'));
});

Browsers targets

You can specify list of target browsers to reduce amount of polyfills.

var autopolyfiller = require('gulp-autopolyfiller');

gulp.src('./your/js/**/*.js')
	.pipe(autopolyfiller('result_polyfill_file.js', {
        browsers: ['last 2 version', 'ie 8', 'ie 9']
    }))
	.pipe(gulp.dest('./dist'));

Default browsers of Autoprefixer

var autopolyfiller = require('gulp-autopolyfiller');

gulp.src('./your/js/**/*.js')
	.pipe(autopolyfiller('result_polyfill_file.js', {
		browsers: require('autoprefixer').default
	}))
	.pipe(gulp.dest('./dist'));

Removig polyfills

var autopolyfiller = require('gulp-autopolyfiller');

gulp.src('./your/js/**/*.js')
	.pipe(autopolyfiller('polyfills_without_promises.js', {
		exclude: ['Promise']
	}))
	.pipe(gulp.dest('./dist'));

License

MIT License

gulp-autopolyfiller's People

Contributors

azproduction avatar vertiman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

vertiman

gulp-autopolyfiller's Issues

acts like concat?

Seems overly complex - shouldnt this just be applied to each file that passes through not buffering it?

Acorn throws error

I have no clue, I'm using gulp-autopolyfiller like promoted:

gulp.task('js', function () {
    return gulp.src([
        'assets/js/main.js'
    ]) 
    .pipe(autopolyfiller('result_polyfill_file.js'))
    .pipe(gulp.dest('build/js'))
})
dev/node_modules/acorn/acorn.js:335
    throw err;
    ^

SyntaxError: Unexpected token (1:7)
    at raise (dev/node_modules/acorn/acorn.js:333:15)
    at unexpected (dev/node_modules/acorn/acorn.js:1366:5)
    at semicolon (dev/node_modules/acorn/acorn.js:1353:47)
    at parseExpressionStatement (dev/node_modules/acorn/acorn.js:1803:5)
    at parseStatement (dev/node_modules/acorn/acorn.js:1589:19)
    at parseTopLevel (dev/node_modules/acorn/acorn.js:1526:18)
    at Object.exports.parse (dev/node_modules/acorn/acorn.js:48:12)
    at scan (dev/node_modules/autopolyfiller/lib/polyfill-scan/index.js:29:22)
    at Object.AutoPolyFiller._scan (dev/node_modules/autopolyfiller/index.js:46:25)
    at Object.AutoPolyFiller.add (dev/node_modules/autopolyfiller/index.js:86:30)

All polyfills

How can I get included polyfills like document.querySelector or fetch?

Proper chaining — autopolyfilling uglified code a problem?

Hi Mikhail, great work—I really love the idea! What I'm kind of struggling with right now is the proper way of adding it to my Gulp scripts-chain:

gulp.task('scripts', function() {
  return gulp.src('src/scripts/**/*.js')
    .pipe(jshint('.jshintrc'))
    .pipe(jshint.reporter('default'))
    .pipe(concat('main.js'))
    .pipe(gulp.dest('dist/scripts'))
    .pipe(rename({ suffix: '.min' }))
    .pipe(uglify())
    .pipe(gulp.dest('dist/scripts'))
    .pipe(autopolyfiller('polyfills.js'))
    .pipe(gulp.dest('dist/scripts'))
    .pipe(notify({
        message: 'Scripts task complete'
    }));
});

It feels like I have to put the autopolyfiller at the end because it (of course) doesnt't pipe the original source back. Do you think there will occur problems if I polyfill the uglified output? Or do I have to split it up to different tasks then?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.