Как избежать 'неперехваченного ReferenceError: stringClasses не определено'? - PullRequest
1 голос
/ 19 июня 2019

У меня есть код JavaScript, который я хочу минимизировать. Я использую задачи gulp, чтобы сделать это:

...
gulp.task('app.js', () => {
    return gulp.src('src/assets/js/*.js')
        .pipe(babel({presets: ['env']}))
        .pipe(uglify())
        .pipe(gulp.dest('src/public/js'))
})
...

Но я заметил, что у меня была ошибка javascript при попытке доступа к странице, которая загружает html с этим уменьшенным javascript:

Uncaught ReferenceError: stringClasses is not defined
    at newElement (jv.js:1)
    at new Screen (jv.js:1)
    at HashGame (jv.js:1)
    at jv.js:1

Итак, я подумал, что это проблема с функцией uglify() и удалил шаг uglify, но проблема продолжается (поэтому проблема в babel):

Uncaught ReferenceError: stringClasses is not defined
    at newElement (jv.js:12)
    at new Screen (jv.js:137)
    at HashGame (jv.js:153)
    at jv.js:162

Оригинальная функция newElement:

function Item(id){
    this.elem = newElement('div', 'item', 'pencilBorder')
    this.elem.id = id
    this.play = (checker) => {
        if (!this.elem.attributes.filled){
            this.elem.innerHTML = 'X'
            this.elem.attributes.value = 'X'
            this.elem.setAttribute("filled", true)
            if (!checker.check()){
                robotPlay()
                checker.check()
            }
        }
    }
    this.elem.onclick = (e) => {
        this.play(new Checker())
    }
}

и babel меняет его на:

function newElement(tagName) {
    var elem = document.createElement(tagName);

    for (var _len = arguments.length, classNames = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        classNames[_key - 1] = arguments[_key];
    }

    stringClasses = classNames.reduce(function (ac, current) {
        return ac + " " + current;
    });
    elem.className = stringClasses;
    return elem;
}

Я искал опции babel и пробовал новые пресеты, но ничего не получалось. Кто-нибудь знает как это решить?

1 Ответ

0 голосов
/ 19 июня 2019

Итак, я нашел проблему: это была моя функция newElement.

Я объявил переменную stringClasses без var / let или const перед ней, и она работает, если я не использую babel. Но когда babel меняет его на es2015, это вызывает проблему.

...