2015-03-03 14 views
7

Używam Babel do transpozycji ES6 do ES5 i działa świetnie. Jedynym problemem jest to, że raz transpiled każdy moduł powiela te linie:babel/6to5 - zduplikowany kod przy eksporcie modułów

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"); } }; 

Ponieważ mój wniosek będzie miał coraz więcej modułów klas określających, nie mogę sobie wyobrazić waisting tyle miejsca właśnie z powodu tych powtarzających się kod.

Czy istnieje sposób, aby powiedzieć Babel, aby nie umieszczał ich w każdym module, abyśmy mogli dodać je tylko raz?

Używam łyk i mój config to:

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')); 
}); 

dziękuję za pomoc!

Odpowiedz

5

Tak, jak jest to opisane w documentation:

Babel używa bardzo małych pomocników dla typowych funkcji, takich jak _extend. Domyślnie zostanie dodany do każdego pliku, który tego wymaga. Takie powielanie jest czasami niepotrzebne, szczególnie gdy aplikacja jest rozłożona na wiele plików.

To tutaj pojawia się opcjonalny transformator środowiska wykonawczego. Wszyscy pomocnicy odwołają się do modułu babel-runtime, aby uniknąć powielania całego skompilowanego wyjścia.

Wykorzystanie

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

$ babel --optional runtime script.js 
+6

mi wiadomo na ten temat: wydaje się z dokumentacji, że ta opcja dodaje cały rdzeń-js, który chyba trzeba wkładka skutecznie js, zdecydowanie pokonałby korzyść z golenia bajtów, unikając powtórzeń pomocnika, prawda? Czy nie ma sposobu, aby nie powielić helperów bez dodawania core-js? – davidtheclark

Powiązane problemy