【问题标题】:UglifyJS2 invalid assignment on [] =UglifyJS2 [] = 上的无效赋值
【发布时间】:2017-10-24 09:25:13
【问题描述】:

我已经开始处理一个使用gulp-uglify 来缩小它的 JS 的旧项目,但是当我运行 gulp 任务时出现以下错误:

GulpUglifyError: unable to minify JavaScript
Caused by: SyntaxError: Invalid assignment
File: app/assets/js/main.js
Line: 92
invalid assignment [] =

当我查看第 92 行时,我看到了一个奇怪的变量赋值,它的语法我不熟悉:

[newTitle, newVal] = $('#' + elementId + '-title').text().replace('*', '').split(':');

它后来发生在:

[prodW = 0, prodL = 0, boxL = 0] = currentOption.text().split(/[\/-]/);

如果我发布这些行,我会收到更多错误,因为 newTitlenewValprodWprodLboxL 都在其他地方使用。

知道这里发生了什么,有办法避免这些错误吗?

这是我正在运行的 gulp 任务,以防万一……

gulp.task('compressJS', function (cb) { 
    pump([
            gulp.src('app/assets/js/*.js'),
            uglify(),
            gulp.dest('build/js/')
        ],
        cb
    );
});

【问题讨论】:

  • 使用支持 es6 的 uglifier 或转译器先创建 es5 代码,然后再对其进行 uglify

标签: javascript variable-assignment uglifyjs gulp-uglify


【解决方案1】:

这是 JavaScript ES6 的一个特性,称为Destructuring Assignment

问题是Uglify2 不兼容 ES6。你可以尝试使用新的Uglify3,它是兼容的,或者先将你的ES6代码转换为ES5,比如gulp-babel:https://www.npmjs.com/package/gulp-babel

用 Babel 做的好处还在于旧的浏览器不支持 ES6。

【讨论】:

  • 谢谢@Daniel,这是有道理的。所以我尝试使用bable online 转换回 es5,但没有任何变化。我需要选择 es2015 作为预设之一吗?
  • 你也知道为什么 babel 会在最后添加一个空声明 _currentOption$text$s; 吗?
  • 是的,您需要设置一个预设。我建议使用env 预设,您可以在其中提供应支持的浏览器列表。但简单地使用es2015 也可以。
  • 声明只是 babel 转换代码所需的东西。如果它们真的没有被使用,Uglify 会为你移除它们。 :)
猜你喜欢
  • 2011-05-06
  • 2019-03-25
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 2017-04-26
  • 2018-10-08
相关资源
最近更新 更多