J'essaie d'utiliser gulp afin de minifier un dossier contenant des fichiers JS. Cependant, l'un des fichiers contient l'erreur ci-dessus, l'empêchant d'être minifié.
J'ai réussi à attraper et à imprimer l'erreur, que j'ai partiellement imprimée ici:
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
}
Le fichier en question contient les éléments suivants, abrégés:
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() {}
}
});
...
}
J'ai ajouté le "*" ci-dessus afin d'indiquer la position exacte listée par JS_Parse_Error.
D'après les commentaires ~ @imolit
v2.0.0 (2018-09-14) - RUPTURES DE CHANGEMENTS (lien) _
Revenez dans uglify-js (uglify-es est abandonné. Si vous avez besoin d'uglify code ES6, veuillez utiliser terser-webpack-plugin ).
J'espère que vous pourrez vous inspirer de cette solution qui fonctionne avec Webpack. (lien ci-dessous)
Il existe deux versions de UglifyJS - ES5 et ES6 (Harmony), voir sur git
La version ES5 est fournie par défaut avec tous les plugins, mais si vous installez une version Harmony explicitement, ces plugins l'utiliseront à la place.
package.json
"uglify-js": "git+https://github.com/mishoo/UglifyJS2.git#harmony"
ou
npm install --save uglify-js@github:mishoo/UglifyJS2#harmony
yarn add git://github.com/mishoo/UglifyJS2#harmony --dev
Pour l'utiliser avec webpack, installez également le plugin webpack
npm install uglifyjs-webpack-plugin --save-dev
yarn add uglifyjs-webpack-plugin --dev
puis importez le plugin installé manuellement
var UglifyJSPlugin = require('uglifyjs-webpack-plugin');
et le remplacer dans le code
- new webpack.optimize.UglifyJsPlugin({ ... })
+ new UglifyJSPlugin({ ... })
Pour plus d'informations sur le pack Web (Installation/Utilisation), voir https://github.com/webpack-contrib/uglifyjs-webpack-plugin#install
npm install uglifyjs-webpack-plugin --save-dev
n'est pas suffisant
Le problème principal est "uglifyjs-webpack-plugin": "^0.4.6"
dans package.json de webpack
Selon semver , ^0.4.6 := >=0.4.6 <0.5.0
. En raison du zéro non significatif, webpack
n'utilisera jamais le 1.0.0-beta.2
.
Ainsi, après avoir exécuté npm i -D uglifyjs-webpack-plugin@beta
, vous devez effectuer une étape supplémentaire, à savoir rm -rf node_modules/webpack/node_modules/uglifyjs-webpack-plugin
. Ensuite, webpack récupérera la version à partir de node_modules/uglifyjs-webpack-plugin
au lieu de node_modules/webpack/node_modules/uglifyjs-webpack-plugin
Mise à jour du 2018-04-18: ce problème ne concerne pas webpack v4
Ajoutez la dépendance babel-preset-es2015
pour résoudre ce problème.
Et ajoutez également 'es2015'
dans le fichier .babelrc
.
json
{
"presets": ["es2015"]
}
J'ai le même problème, j'ai trouvé une excellente réponse ici qui m'a aidé à atteindre le fichier qui était à l'origine de l'erreur.
Allez sur Rails Console and Paste:
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
J'espère que ça aide quelqu'un!
Pour moi, cela n'avait rien à voir avec Uglify ne fonctionnant pas correctement, mais plutôt une dépendance (dans ce cas vide-promesse) qui n'a pas encore été compilée pour ES5. Comme nous venons d'importer le fichier source brut, mais que Babel ne fait que transpiler des fichiers en dehors de node_modules, uglify a été confondu par la syntaxe ES6.
Il suffit de vérifier si la dépendance que vous avez récemment ajoutée n’a pas nécessairement une construction "dist".
Si vous rencontrez cette erreur avec Grunt (grunt-contrib-uglify), la solution consiste à installer la version ES6 du plug-in:
npm install grunt-contrib-uglify-es --save-dev
Ajoutez l’étape 3 aux paramètres prédéfinis du fichier .babelrc.
{
"presets": [
"stage-3"
]
}
J'ai eu le même problème avec vous. J'utilisais gulp.js. J'ai résolu ce problème grâce aux fichiers js qui changent de format ES. Par exemple avant résolu est mon code:
for (district for response) {
$('#districts').append('<option value="' + district.id + '">' + district.name + '</option>');
$('#districts').removeAttr('disabled');
}
après le code correctif:
for (district in response) {
$('#districts').append('<option value="' + district.id + '">' + district.name + '</option>');
$('#districts').removeAttr('disabled');
}
En résumé, le problème est dû à Ecma-uglify.js.