Выяснить, что преобразование browserify не удается - PullRequest
0 голосов
/ 28 мая 2019

У меня довольно нетривиальный конвейер browserify со многими преобразованиями (некоторые глобальные, некоторые локальные).В последнее время сборка время от времени терпит неудачу (не может быть предсказуемо воспроизведена) на Unexpected token (я считаю, что-то делать с некомпилированным ES / JSX).Трассировка стека вообще бесполезна.

Я даже не знаю, какой файл в пакете действительно дает сбой, не говоря уже о том, почему.Не уверен, откуда возникла ошибка (событие error не генерируется в потоке browserify или не передается в обратный вызов bundle - ну, cb даже не вызывается для начала).

Я подозреваю, что одно из преобразований ожидает ES5 и не может встретиться с ES6 или JSX, но я не понимаю, почему это так, поскольку преобразование babelify должно выполняться заранее.Либо это, либо, может быть, он неправильно преобразовывает частичный файл.

Чтобы выяснить первопричину, мне нужно выяснить, какое преобразование (или часть конвейера) дает сбой.

Таким образом, у меня есть нескольковопросы:

  1. как правильно отлаживать browserify (или потоки в целом)?Как перехватить ошибки, которые могут быть сгенерированы в любом месте конвейера?
  2. Как определить, какая часть конвейера browserify не работает?

Моя задача компиляции выглядит примерно так:

function compile () {
    return new Promise((resolve, reject) => {
        let stream;
        stream = browserify({/* opts */ });
        stream = stream.transform( envify(), { global: true });
        stream = stream.bundle( err => {
            if ( err ) reject(err);
        });
        stream.on("error", err => {
            console.error(err);
        });
        stream.pipe(
            fs.createWriteStream( bundle.dist )
                .on( "close", resolve )
        );
    })
}
...