Inter-Net.PRO

Ошибка Unhandled 'error' event - в gulp

  • 250 60
29 апр 2018 14:22 #1 от Inter-Net PRO
При попытке сжать файл js через гальп (gulp), в терминале выводится такая ошибка:
events.js:141
  throw er; // Unhandled 'error' event
  ^
Error
и куча ещё всяких строк с путями.

В моём случае дело оказалось в том, что gulp-uglify не может (или просто не понимает) ES6

Разрулить проблему может npm-овский пакет Babel для Gulp, который преобразует код из ES6 в ES2015
После того как я прогнал код через Babel, ошибка из терминала исчезла, а плагин gulp-uglify заработал.

Чтобы установить Babel для Gulp, в терминале в корневой директории проекта выполняем команду:
npm install --save-dev gulp-babel babel-core babel-preset-env

В файле gulpfile.js проекта подключаем Babel
const gulp = require('gulp');
const babel = require('gulp-babel');
 
gulp.task('babeljs', () =>
    gulp.src('app/js/**/*.js')
        .pipe(babel({
            presets: ['env']
        }))
        .pipe(gulp.dest('dist'))
);
Данный таск вызывается из терминала командой: gulp babeljs

Если есть необходимость помечать файлы прогнанные через Babel, можно использовать gulp-rename, который разными способами переименовывает файлы и добавляет суффиксы.
Тогда получается такой таск:
gulp.task('babeljs', () =>
	gulp.src('app/js/**/*.js')
		.pipe(babel({
			presets: ['env']
		}))
		.pipe(rename({ suffix: '.babel' })) 	// Добавляем суффикс .babel (если файл был script.js будет script.babel.js)
		.pipe(gulp.dest('app/js'))
);

Если в скрипте применяется импорт (подключение к скрипту других js-файлов), то стоит добавить Source Maps
Инструкции: www.npmjs.com/package/gulp-babel

Авторизация

Войти через соцсети: