Предустановки Babel es2015 не переводят Map и Set на es5

Я использую gulp-babel для перевода своего кода es6 в es5

gulp.task('build_all_debug', ['config', 'compile'], function() {
    var stream = gulp.src(['public/js/config.js', 'public/js/*.js', 'public/compiled/*.js'])
        .pipe(babel({
            presets: ['es2015']
        }))
        .pipe(concat('app.js'))
        .pipe(gulp.dest('public/dist'));
    return stream;
});

Хотя он в основном работает нормально, он фактически не переводит Map и Set. Мой код js результата все еще включает их, и когда я запускаю модульное тестирование с помощью karma/mocha/phantomJs, я получаю следующую ошибку:

PhantomJS 2.1.1 (Mac OS X 0.0.0) notes.controller "before each" hook: workFn for "loads notes from the service" FAILED
    Can't find variable: Map
    activate@public/dist/app.js:2402:39

Есть ли способ заставить babel перевести Map и Set в объект и массив в es5?

3 ответа

Решение

Вы должны включить babel-polyfill в вашем коде.

Вы должны установить его с помощью npm:

npm install babel-polyfill

и затем, если вы используете модули ES6:

import 'babel-polyfill';

или же:

require('babel-polyfill');

Если вы хотите запустить свой код в браузере, вы можете загрузить его из cdnjs:

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.16.0/polyfill.min.js"></script>

Бабель не может "перевести" Map а также Setпотому что они не являются языковыми функциями (хотя они описаны в спецификации ES). Это классы, которые существуют в глобальной области видимости.

Вы должны использовать polyfill, который определяет коллекции ES6, чтобы вы могли продолжать использовать их в браузерах, которые не поддерживают. Я не уверен, какую библиотеку использует Babel, но es6-shim должен охватывать все основные части.

Вам не нужно менять ваш код, чтобы использовать polyfill, он просто определяет Map (и друзья) для нормального использования позже.

Бабель не переносит Map а также Set до ES5.

Вместо этого используйте их polyfill:

Чтобы поддерживать Карты, Наборы, Слабые карты и Слабые наборы во всех средах, необходимо включить полифилл Babel.

Источник

Другие вопросы по тегам