web-dev-qa-db-de.com

Uglify SyntaxError: Unerwartetes Token: punc ())

Ich versuche, gulp zu verwenden, um einen Ordner mit JS-Dateien zu minimieren. Eine der Dateien hat jedoch den oben genannten Fehler und verhindert, dass sie minimiert werden.

Es ist mir gelungen, den Fehler, den ich hier teilweise gedruckt habe, zu fangen und auszudrucken:

JS_Parse_Error {
 message: 'SyntaxError: Unexpected token: punc ())',
 filename: 'ex.js',
 line: 189,
 col: 25,
 pos: 6482,
 stack: Error\n    at new JS_Parse_Error (eval at <anonymous> ... ) 
 plugin: 'gulp-uglify',
 fileName: '.../js/ex.js',
 showStack: false
}

Die betreffende Datei enthält Folgendes, gekürzt:

function() {
  ...
  $.confirm({
    buttons: {
        confirm: function() {
            $.post('/ajax-handler', {
                    ...
                })
                .done( function(response) {
                    var data = filterResponse(response);
                    if (data['status'] == 'success') {
                        sleep(1000).then(() => {
                    *       ...
                        });
                        sleep(5000).then(() => {
                            ...  
                        });

                    } else {
                        console.log('Oops!');
                    }
                })
                .fail( function(err, status, response) {
                    ...
            });
        },
        cancel: function() {}
    }
 });
  ...
}

Ich habe das "*" oben hinzugefügt, um die genaue Position anzugeben, die von JS_Parse_Error aufgelistet wird.

51
Alexander

// Update

Aus den Kommentaren ~ @imolit

 v2.0.0 (2018-09-14) - BRECHENDE ÄNDERUNGEN (Verbindung)

Wechseln Sie wieder nach uglify-js (uglify-es wird aufgegeben. Wenn Sie ES6-Code benötigen, verwenden Sie terser-webpack-plugin ).


Ursprüngliche Antwort vor dem Update ...

Ich hoffe, Sie können sich von dieser mit Webpack funktionierenden Lösung inspirieren lassen. (Link unten)

Unterrichten Sie einfach UglifyJS ES6

Es gibt zwei Versionen von UglifyJS - ES5 und ES6 (Harmony). siehe git
Die ES5-Version wird standardmäßig mit allen Plugins mitgeliefert. Wenn Sie jedoch explizit eine Harmony-Version installieren, verwenden diese Plugins diese stattdessen.

package.json

"uglify-js": "git+https://github.com/mishoo/UglifyJS2.git#harmony"

oder

npm install --save [email protected]:mishoo/UglifyJS2#harmony

yarn add git://github.com/mishoo/UglifyJS2#harmony --dev

Webpack

Zur Verwendung mit Webpack installieren Sie auch das Webpack-Plugin

npm install uglifyjs-webpack-plugin --save-dev

yarn add uglifyjs-webpack-plugin --dev

importieren Sie dann das manuell installierte Plugin

var UglifyJSPlugin = require('uglifyjs-webpack-plugin');

und ersetzen Sie es im Code

-  new webpack.optimize.UglifyJsPlugin({ ... })
+  new UglifyJSPlugin({ ... })

Weitere Webpack-Informationen (Installation/Verwendung) finden Sie unter https://github.com/webpack-contrib/uglifyjs-webpack-plugin#install

49
Qwerty

npm install uglifyjs-webpack-plugin --save-dev reicht nicht aus

Das Hauptproblem ist "uglifyjs-webpack-plugin": "^0.4.6" in webpacks package.json

Gemäß semver , ^0.4.6 := >=0.4.6 <0.5.0. Aufgrund der führenden Null verwendet webpack niemals den 1.0.0-beta.2.

Nachdem Sie npm i -D [email protected] ausgeführt haben, müssen Sie einen weiteren Schritt ausführen, nämlich rm -rf node_modules/webpack/node_modules/uglifyjs-webpack-plugin. Dann holt webpack die Version von node_modules/uglifyjs-webpack-plugin anstelle von node_modules/webpack/node_modules/uglifyjs-webpack-plugin ab.

Update am 18.08.2014: Webpack v4 hat dieses Problem nicht

17
WOW

Fügen Sie die babel-preset-es2015-Abhängigkeit hinzu, um dies zu beheben.

Fügen Sie auch 'es2015' in der .babelrc-Datei hinzu.

json
{
    "presets": ["es2015"]
}
8
Qing

Ich habe das gleiche Problem, ich habe eine großartige Antwort gefunden hier , die mir half, die Datei zu finden, die den Fehler verursacht hat.

Gehen Sie zu Rails Console und fügen Sie ein:

JS_PATH = "app/assets/javascripts/**/*.js";
Dir[JS_PATH].each do |file_name|
  puts "\n#{file_name}"
  puts Uglifier.compile(File.read(file_name))
end

Hoffe es hilft jemandem!

3
Hamza Khan

Für mich hatte es nichts damit zu tun, dass Uglify nicht richtig funktionierte, sondern eher eine Abhängigkeit (in diesem Fall ein leeres Versprechen), die noch nicht auf ES5 kompiliert wurde. Da wir die Roh-Quelldatei gerade importiert haben, Babel jedoch nur Dateien außerhalb von node_modules transpiliert, wird uglify durch die ES6-Syntax verwirrt.

Prüfen Sie einfach, ob eine kürzlich hinzugefügte Abhängigkeit keinen "dist" -Aufbau enthält.

2
spaceemotion

Wenn Sie diesen Fehler bei der Verwendung von Grunt (grunt-contrib-uglify) erhalten, können Sie die ES6-Version des Plugins installieren:

npm install grunt-contrib-uglify-es --save-dev
0
amicoderozer

Fügen Sie Stufe 3 den Voreinstellungen in der .babelrc-Datei hinzu. 

{
  "presets": [
    "stage-3"
  ]
}
0
Cong Nguyen

Ich hatte das gleiche Problem mit dir. Ich habe gulp.js benutzt. Ich habe dieses Problem dank js files ES Format behoben. Zum Beispiel, bevor mein Code gelöst ist:

for (district for response) {
                $('#districts').append('<option value="' + district.id + '">' + district.name + '</option>');
                $('#districts').removeAttr('disabled');
            }

nach Fixcode:

for (district in response) {
                $('#districts').append('<option value="' + district.id + '">' + district.name + '</option>');
                $('#districts').removeAttr('disabled');
            }

Zusammenfassend ist das Problem auf Ecma-uglify.js zurückzuführen.

0
melih sahin