2015-03-03 20 views
7

Ich verwende Babel, um ES6 zu ES5 zu transponieren, und es funktioniert großartig. Das einzige Problem ist, dass, sobald transpiled jedes Modul diese Zeilen Duplikate:babel/6to5 - duplizierter Code beim Exportieren von Modulen

var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; 
var _inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }; 
var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; 

Da meine Anwendung mehr und mehr Module Definition von Klassen haben wird, kann ich mir nicht vorstellen, so viel Raum Taillierung, nur weil dieser wiederholten Code.

Gibt es eine Möglichkeit, Babel zu sagen, sie nicht in jedes Modul aufzunehmen, damit wir sie nur einmal hinzufügen können?

Ich bin mit großem Schluck und meine Config ist:

var gulp = require('gulp'); 
var concat = require('gulp-concat'); 
var babel = require('gulp-babel'); 

gulp.task('default', function() { 

    return gulp.src('src/**/*.es6') 
     .pipe(babel({ playground: true, experimental: true, modules: 'amd', moduleIds: true })) 
     .pipe(concat('tmp/src.js')) 
     .pipe(gulp.dest('dist')); 
}); 

Vielen Dank für Ihre Hilfe!

Antwort

5

Ja, wie es in den documentation beschrieben:

Babel nutzt sehr kleine Helfer für allgemeine Funktionen wie _extend. Standardmäßig wird dies jeder Datei hinzugefügt, die es benötigt. Diese Duplizierung ist manchmal unnötig, besonders wenn Ihre Anwendung auf mehrere Dateien verteilt ist.

Hier kommt der Runtime-Optionstransformator ins Spiel. Alle Helfer verweisen auf das Modul babel-runtime, um eine Duplizierung der kompilierten Ausgabe zu vermeiden.

Nutzungs

require("babel").transform("code", { optional: ["runtime"] }); 

$ babel --optional runtime script.js 
+6

Ich bin unklar dazu: es aus der Dokumentation scheint, dass diese Option alle Kern-js fügt hinzu, die, es sei denn, Sie benötigen Core- js, würde definitiv den Vorteil der Rasur Bytes durch Vermeidung von Helfer Wiederholung besiegen, oder? Gibt es keine Möglichkeit, die Helfer nicht zu kopieren, ohne Core-js hinzuzufügen? – davidtheclark