web-dev-qa-db-fra.com

GulpUglifyError: impossible de réduire JavaScript

J'essaie de minimiser mes fichiers de script pour lesquels j'utilise gulp task runner Et j'essaye le gulp-uglify plugin

Code:

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

mais je reçois une erreur comme

enter image description here

quand j'essaye de lancer une tâche en tant que gulp concat Toute aide serait appréciée

45
swathi anupuram

L'erreur principale est générée lorsque vous utilisez le format ES6. Utilisez le module gulp-uglify-es au lieu de "gulp-uglify" pour remédier à cette erreur.

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

Remarque: gulp-uglify-es n'est plus maintenu. Vous voudrez peut-être utiliser terser/gulp-terser au lieu:

65
haouarin

Pour voir l'erreur dans la console:

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/'))
});

Pour trouver le fichier exact, avec le numéro de ligne du registre d’erreur et exécuter cette tâche:

var pump = require('pump');

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

Avez-vous utilisé le format ES6 dans votre fichier de script? Si c'est le cas, essayez ES5 maintenant car lorsque vous faites gulp-uglify, il ne comprend pas le format ES6 dès maintenant et après cela, essayez votre code.

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

et lancez la tâche gulp concat ça va marcher

14
Shikha thakur

Je pense que les principales réponses ici n'expliquent pas comment obtenir l'erreur. Les docs ont une section sur la gestion des erreurs:

gulp-uglify émet un événement 'error' s'il est incapable de réduire un fichier spécifique

Donc, capturez simplement l'erreur et faites ce que vous voulez (comme vous connecter à la console) pour voir le nom du fichier, le numéro de ligne et des informations supplémentaires:

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

ou dans un contexte plus large:

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('./'));

});

Cela vous donne une erreur super utile!

{ 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 }
5
Charlie Schliesser

Pour moi, c'était une option obsolète "preserveComments" qui a généré l'erreur (et qui a complètement écrasé le script).

Trouvé le problème en utilisant:

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

Essayez d'utiliser ceci

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
Sujithrao

vous pouvez avoir une erreur de syntaxe ou utiliser la syntaxe ES6. vous pouvez essayer https://skalman.github.io/UglifyJS-online/ premièrement.

1
Ajai

L'erreur principale de Unable to minifies JavaScript est le chemin introuvable. Vous pouvez utiliser la tâche usemin Pour cela, vous avez besoin de:

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

et nécessite:

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()]
1
Bipin Shilpakar