Ein kleines Projekt, das ich gestartet habe, verwendet ein Knotenmodul (installiert über npm), das const
-Variablen deklariert. Das Ausführen und Testen dieses Projekts ist gut, aber Browserify schlägt fehl, wenn UglifyJS ausgeführt wird.
Unerwartetes Token: Schlüsselwort (const)
Hier ist eine generische Gulp-Datei, die ich erfolgreich für einige andere Projekte in der Vergangenheit ohne dieses Problem verwendet habe (d. H. Ohne das betreffende Knotenmodul).
'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))
;
});
Ich habe versucht, dies zu beheben, indem Sie alle const
in var
in diesem npm-installierten Modul ersetzen, und alles ist gut. Also verstehe ich den Misserfolg nicht.
Was ist los mit const
? Sofern nicht IE10 verwendet wird, unterstützen all Major-Browser diese Syntax.
Gibt es eine Möglichkeit, dies zu beheben, ohne dass das Knotenmodul geändert werden muss?
Ich habe UglifyJS vorübergehend (oder dauerhaft) durch Butternut ersetzt und scheint zu funktionieren.
November 2018 Update:
Verwenden Sie terser-webpack-plugin für ES6 (webpack @ 5 verwendet dieses Plugin für die Uebertragung)
npm install terser-webpack-plugin --save-dev
Definieren Sie dann in Ihrem plugins
-Array
const TerserPlugin = require('terser-webpack-plugin')
new TerserPlugin({
parallel: true,
terserOptions: {
ecma: 6,
},
}),
UglifyJS unterstützt es6 nicht. const
ist eine es6-Deklaration, daher wird ein Fehler ausgegeben.
Seltsam ist, dass das von Ihnen verwendete Paket seine Dateien nicht für es5 transilt, damit es überall verwendet werden kann.
Wenn Sie weiterhin UglifyJS verwenden möchten (um beispielsweise die Konfiguration erneut zu verwenden), verwenden Sie die ES6 + -kompatible Version uglify-es . (Warnung: uglify-es
ist jetzt aufgegeben .)
Und da Ser erwähnt ist, sollten Sie jetzt terser-webpack-plugin
verwenden.
Ich hatte gerade dieses Problem mit einem Gulp-Projekt, das ich überarbeitet habe, und aus irgendeinem Grund hatte ich Probleme mit dem offiziellen Terser Gulp-Plugin. Dieser (Schlucker) funktionierte ohne Probleme.
Verwenden Sie das uglify-es-webpack-plugin
const UglifyEsPlugin = require('uglify-es-webpack-plugin')
module.exports = {
plugins: [
new UglifyEsPlugin({
compress:{
drop_console: true
}
}),
]
}
Ich habe UglifyJS
mit YUI Compressor JS
In der GUI von PHPStorm ersetzt. Es funktioniert jetzt.