javascript - UglifyJS lancia un token imprevisto: parola chiave(const) con node_modules




npm gulp (4)

Ho appena avuto questo problema con un progetto Gulp che ho modificato e per qualche ragione ho avuto problemi con il plugin ufficiale Terser Gulp. Questo (gulp-terser) ha funzionato senza problemi.

Un piccolo progetto che ho iniziato utilizza un modulo nodo (installato tramite npm ) che dichiara variabili const . L'esecuzione e il test di questo progetto vanno bene, ma browserify non riesce quando viene eseguito UglifyJS.

Token imprevisto: parola chiave (const)

Ecco un file Gulp generico che ho usato con successo per alcuni altri progetti passati senza questo problema (cioè senza quel particolare modulo nodo).

gulpfile.js

'use strict';

const browserify = require('browserify');
const gulp = require('gulp');
const source = require('vinyl-source-stream');
const derequire = require('gulp-derequire');
const buffer = require('vinyl-buffer');
const uglify = require('gulp-uglify');
const sourcemaps = require('gulp-sourcemaps');
const gutil = require('gulp-util');
const path = require('path');
const pkg = require('./package');
const upperCamelCase = require('uppercamelcase');

const SRC_PATH = path.dirname(pkg.main);
const DIST_PATH = path.dirname(pkg.browser);

const INPUT_FILE = path.basename(pkg.main);
const OUTPUT_FILE = path.basename(pkg.browser);

const MODULE_NAME = upperCamelCase(pkg.name);


gulp.task('default', () => {
  // set up the browserify instance on a task basis
  var b = browserify({
    entries: INPUT_FILE,
    basedir: SRC_PATH,
    transform: ['babelify'],
    standalone: MODULE_NAME,
    debug: true
  });

  return b.bundle()
    .pipe(source(OUTPUT_FILE))
    .pipe(buffer())
    .pipe(derequire())
    .pipe(sourcemaps.init({loadMaps: true}))
    .pipe(uglify())
    .on('error', gutil.log)
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest(DIST_PATH))
  ;
});

Ho provato a risolvere questo problema sostituendo tutte le const a var in quel modulo installato npm e tutto va bene. Quindi non capisco il fallimento.

Cosa c'è che non va in const ? A meno che qualcuno non utilizzi IE10, tutti i principali browser supportano questa sintassi.

C'è un modo per risolvere questo problema senza richiedere una modifica a quel modulo di nodo?

Aggiornare

Ho temporaneamente (o permanentemente) sostituito UglifyJS con Butternut e sembra funzionare.


Ho sostituito UglifyJS con YUI Compressor JS all'interno della GUI di PHPStorm .. Funziona ora.


UglifyJS non supporta es6. const è una dichiarazione es6, quindi genera un errore.

Ciò che è strano è che il pacchetto che usi non traspila i suoi file in es5 per essere usato ovunque.

Se vuoi ancora usare UglifyJS (per riutilizzare la configurazione per esempio) usa la versione compatibile ES6 +, uglify-es . ( Attenzione : uglify-es è ora abbandonato .)

E come ha detto Ser , ora dovresti usare terser-webpack-plugin .


Utilizzare uglify-es-webpack-plugin è meglio

    const UglifyEsPlugin = require('uglify-es-webpack-plugin')



    module.exports = {
    plugins: [
            new UglifyEsPlugin({
                compress:{
                    drop_console: true
                }
            }),
    ] 
    }




uglifyjs2