title: Babel polyfill and gulp
body: <p>I can'not correctly load <code>babel/polyfill</code> with gulp. In my case <code>Array.from</code> method is undefined.
  However if try to load <code>browser-polyfill.js</code> with gulp <code>.add(require.resolve("babel/polyfill"))</code> I get an error <code>"only one instance of babel/polyfill is allowed"</code>.
  Source code is correct because I've tested its with babel <code>browser-polyfill.js</code>.</p>
  
  <p>Source code:</p>
  
  <pre><code>//Lib.js
  export default class Lib
  {
    constructor()
    {
      var src = [1, 2, 3];
      this.dst = Array.from(src);
    }
    foo()
    {
      return this.dst;
    }
  }
  
  //main.js
  import Lib from "./Lib";
  
  var l = new Lib();
  console.log(l.foo()); //Uncaught TypeError: Array.from is not a function
  </code></pre>
  
  <p>Gulpfile:</p>
  
  <pre><code>var gulp       = require('gulp');
  var sourcemaps = require('gulp-sourcemaps');
  var source     = require('vinyl-source-stream');
  var buffer     = require('vinyl-buffer');
  var browserify = require('browserify');
  var watchify   = require('watchify');
  var babelify   = require('babelify');
  var uglify     = require('gulp-uglify');
  
  var entryPoint = "./js/main.js";
  
  
  function compile(watch)
  {
    var bundler;
  
    function debug()
    {
      bundler.bundle()
      .on('error', function(err) { console.error(err); this.emit('end'); })
      .pipe(source('main.debug.js'))
      .pipe(buffer())
      .pipe(sourcemaps.init({ loadMaps: true }))
      .pipe(sourcemaps.write('./'))
      .pipe(gulp.dest('./bin'));
    }
  
    function release()
    {
      bundler.bundle()
      .on('error', function(err) { console.error(err); this.emit('end'); })
      .pipe(source('main.release.js'))
      .pipe(buffer())
      .pipe(uglify())
      .pipe(gulp.dest('./bin'));
    }
  
    if(watch)
    {
      bundler = watchify(browserify(entryPoint, { debug: watch })
                          .add(require.resolve("babel/polyfill"))
                          .transform(babelify));
  
      bundler.on('update', function()
      {
        console.log('Sources has changed. Rebuilding...');
        debug();
      });
  
      debug();
    }
    else
    {
      bundler = browserify(entryPoint, { debug: watch })
                .add(require.resolve("babel/polyfill"))
                .transform(babelify);
      release();
    }
  }
  
  
  gulp.task('release', function() { return compile(false); });
  gulp.task('debug',   function() { return compile(true); });
  
  gulp.task('default', ['debug']);
  </code></pre>