Search code examples
javascriptgulpbabeljs

Resolve require Calls for browser output in Babel


I want to transform ES6 to ES5 for browser usage (IE). Since I need some polyfills, "useBuiltIns": "usage" was set.

{
  "sourceType": "script",
  "ignore": ["gulpfile.js"],
  "presets": [
    ["@babel/preset-env", 
      { "useBuiltIns": "usage" }
    ]
  ]
}

But the output file contains require statements at the beginning:

require("core-js/modules/es7.promise.finally");
require("core-js/modules/es6.function.name");
require("core-js/modules/es6.weak-map");
// ...

Why doesn't embed Babel 7 those files? As I understood the documentation of sourceType, we have script for browser usage, so that I get simply a single bundled file without any modules.


Solution

  • I ended using browserify with Babbel plugin in my gulp task:

    const gulp = require("gulp"),
      babel = require("gulp-babel"),
      browserify = require("browserify"),
      fs = require("fs");
    
    gulp.task("js", () => {
      let outputFolder = 'dist'
      let targetFile = "customization.js"
      const js = "src/js"
      let jsSources = [`${js}/polyfills.js`, `${js}/custom.js`]
    
      return browserify(jsSources)
        .transform("babelify")
        .bundle()
        .pipe(fs.createWriteStream(`${outputFolder}/js/${targetFile}`))
    })
    

    This will create a single bundle without any module loaders.