GulpUglifyError:无法缩小JavaScript

问题描述 投票:41回答:9

我正在尝试缩小我的脚本文件,我正在使用gulp任务运行器而我正在尝试gulp-uglify插件

码:

 gulp.task('concat', function() {
    return gulp.src('app/**/*.js')
        // .pipe(concat('script.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist/'))
});

但我得到的错误是

enter image description here

当我尝试运行gulp任务作为gulp concat任何帮助将不胜感激

javascript gulp gulp-uglify
9个回答
65
投票

使用ES6格式时会生成主要错误。使用gulp-uglify-es模块而不是'gulp-uglify'来克服此错误。

var uglify = require('gulp-uglify-es').default;

注意:不再维护gulp-uglify-es。您可能想要使用terser / gulp-terser代替:


54
投票

要在控制台中查看错误:

var gutil = require('gulp-util');

gulp.task('concat', function() {
return gulp.src('app/**/*.js')
    // .pipe(concat('script.js'))
    .pipe(uglify())
    .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); })
    .pipe(gulp.dest('./dist/'))
});

要查找具有错误寄存器行号的确切文件并运行此任务:

var pump = require('pump');

gulp.task('uglify-error-debugging', function (cb) {
  pump([
    gulp.src('app/**/*.js'),
    uglify(),
    gulp.dest('./dist/')
  ], cb);
});

14
投票

您是否在脚本文件中使用了ES6格式?如果是这样的话,现在尝试使用ES5,因为当你执行gulp-uglify时,它现在不理解ES6格式,之后尝试你的代码

 gulp.task('concat', function() {
    return gulp.src('app/**/*.js')
        .pipe(concat('script.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist/'))
});

并运行任务gulp concat它将工作


5
投票

我认为这里的最佳答案并不是解释如何获得错误。 docs有一个关于错误处理的部分:

如果gulp-uglify无法缩小特定文件,则会发出“错误”事件

因此,只需捕获错误并使用它执行任何操作(例如记录到控制台)以查看文件名,行号和其他信息:

uglify().on('error', console.error)

或者在更大的背景下:

gulp.task('foo', () => {

    return gulp.src([
        'asset/src/js/foo/*.js',
        'asset/src/js/bar/*.js',
    ])
    .pipe(uglify().on('error', console.error))
    .pipe(concat('bundle.js'))
    .pipe(gulp.dest('./'));

});

这给你一个超级有用的错误!

{ GulpUglifyError: unable to minify JavaScript
    at [stack trace])
  cause:
   { SyntaxError: Continue not inside a loop or switch
       [stack trace]
     message: 'Continue not inside a loop or switch',
     filename: 'ProductForm.js',
     line: 301,
     col: 37,
     pos: 10331 },
  plugin: 'gulp-uglify',
  fileName:
   '/asset/src/js/foo/ProductForm.js',
  showStack: false }

2
投票

试试这个

var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var minifyJS = require('gulp-minify');

gulp.task('concat', function() {
    return gulp.src('app/**/*.js')
        .pipe(minifyJS())
        .pipe(concat('bundle.min.js'))
        .pipe(uglify({ mangle: false }))
        .pipe(gulp.dest('./dist/'));
});

2
投票

对我来说,这是一个弃用的选项“preserveComments”,它产生了错误(并完全破坏了脚本)。

发现问题使用:

gulp.task('concat', function() {
return gulp.src('app/**/*.js')
    .pipe(uglify())
    .on('error', function (err) { console.log( err ) })
    .pipe(gulp.dest('./dist/'))
});

1
投票

您可能有语法错误或使用ES6语法。你可以先试试https://skalman.github.io/UglifyJS-online/


1
投票

无法缩小JavaScript的主要错误是找不到路径。您可以使用任务usemin为此您需要:

$ sudo npm install gulp-usemin --save-dev
$ sudo npm install gulp-livereload --save-dev
$ sudo npm install gulp-util --save-dev

并要求:

var usemin = require('gulp-usemin');
var livereload = require('gulp-livereload');
var gutil = require('gulp-util'); //gutil for error display

gulp.task('usemin',['jshint'], function(){
    return gulp.src('./app/index.html')
    .pipe(usemin({
        css: [minifycss(),rev()],
        scripts: [uglify().on('error', function(err) {gutil.log(gutil.colors.red('[Error]'), err.toString());this.emit('end');}),rev()]
    })) 
    .pipe(gulp.dest('dist'))
    .pipe(livereload());
});

Change the js: [uglify(), rev()] to scripts: [uglify(), rev()]
© www.soinside.com 2019 - 2024. All rights reserved.