javascript - from uglifyjs unexpected token: punc
Uglify SyntaxError: token inesperado: punc()) (8)
// Actualización
v2.0.0 (2018-09-14) - ROMPIENDO CAMBIOS (link)
Vuelva a uglify-js (uglify-es está abandonado, si necesita el código uglify ES6, use terser-webpack-plugin ).
Respuesta original antes de la actualización ...
Espero que pueda inspirarse con esta solución que funciona con webpack. (enlace debajo)
Simplemente enseñe UglifyJS ES6
Hay dos versiones de UglifyJS:
ES5
y
ES6
(Harmony),
ver en git
La versión ES5 viene por defecto con todos los complementos, pero si instala una versión de Harmony explícitamente, esos complementos la usarán en su lugar.
package.json
"uglify-js": "git+https://github.com/mishoo/UglifyJS2.git#harmony"
o
npm install --save uglify-js@github:mishoo/UglifyJS2#harmony
yarn add git://github.com/mishoo/UglifyJS2#harmony --dev
Paquete web
Para usarlo con webpack, instale también el complemento webpack
npm install uglifyjs-webpack-plugin --save-dev
yarn add uglifyjs-webpack-plugin --dev
luego importe el complemento instalado manualmente
var UglifyJSPlugin = require(''uglifyjs-webpack-plugin'');
y reemplazarlo en el código
- new webpack.optimize.UglifyJsPlugin({ ... })
+ new UglifyJSPlugin({ ... })
Para obtener más información sobre el paquete web (Instalación / Uso), consulte https://github.com/webpack-contrib/uglifyjs-webpack-plugin#install
Estoy tratando de usar gulp para minificar una carpeta que contiene archivos JS. Sin embargo, uno de los archivos tiene el error anterior, lo que impide que se minimice.
Logré atrapar e imprimir el error, que he impreso parcialmente aquí:
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
}
El archivo en cuestión contiene lo siguiente, acortado:
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() {}
}
});
...
}
Agregué el "*" anterior para indicar la posición exacta enumerada por JS_Parse_Error.
Agregue la dependencia
babel-preset-es2015
para solucionar esto.
Y también agregue
''es2015''
en el archivo
.babelrc
.
json
{
"presets": ["es2015"]
}
Agregue stage-3 a los presets en el archivo .babelrc.
{
"presets": [
"stage-3"
]
}
Para mí no tenía nada que ver con que Uglify no funcionara correctamente, sino que era una dependencia (en este caso, una promesa vacía) que aún no se había compilado en ES5. Como acabamos de importar el archivo fuente sin procesar, pero babel solo está transpilando archivos fuera de node_modules, uglify se confundió con la sintaxis de ES6.
Simplemente verifique si alguna dependencia que haya agregado recientemente podría no tener una compilación "dist".
Si recibió este error al usar Grunt (grunt-contrib-uglify), la solución es instalar la versión ES6 del complemento:
npm install grunt-contrib-uglify-es --save-dev
Tengo el mismo problema, encontré una gran respuesta here que me ayudó a llegar al archivo que estaba causando el error.
Vaya a la consola de Rails y pegue:
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
Espero que ayude a alguien!
Tuve el mismo problema contigo. Estaba usando gulp.js. Resolví este problema gracias a que los archivos js cambian el formato ES. Por ejemplo, antes de resolver es mi código:
for (district for response) {
$(''#districts'').append(''<option value="'' + district.id + ''">'' + district.name + ''</option>'');
$(''#districts'').removeAttr(''disabled'');
}
después del código de reparación:
for (district in response) {
$(''#districts'').append(''<option value="'' + district.id + ''">'' + district.name + ''</option>'');
$(''#districts'').removeAttr(''disabled'');
}
En resumen, el problema se debe a Ecma-uglify.js.
npm install uglifyjs-webpack-plugin --save-dev
no es suficiente
El problema principal es
"uglifyjs-webpack-plugin": "^0.4.6"
en
el paquete web.json
Según
semver
,
^0.4.6 := >=0.4.6 <0.5.0
.
Debido al cero
webpack
,
webpack
nunca usará el
1.0.0-beta.2
.
Entonces, después de ejecutar
npm i -D uglifyjs-webpack-plugin@beta
, debe realizar un paso más que es
rm -rf node_modules/webpack/node_modules/uglifyjs-webpack-plugin
.
Luego, webpack recogerá la versión de
node_modules/uglifyjs-webpack-plugin
lugar de
node_modules/webpack/node_modules/uglifyjs-webpack-plugin
Actualización en 2018-04-18: webpack v4 no tiene este problema