【问题标题】:How to solve this minification error on Gulp?如何解决 Gulp 上的这个缩小错误?
【发布时间】:2016-08-11 03:35:29
【问题描述】:

运行此命令时遇到错误

gulp.task('minify', function () {
    return gulp
      .src('public/app/js/myapp.bundle.js')
      .pipe(uglify())
      .pipe(gulp.dest('public/app/js/myapp.bundle.min.js'));
});

GulpUglifyError: 无法缩小 JavaScript 原因:SyntaxError: Unexpected token: name (MenuItem) (line: 1628, col: 18, pos: 53569)

该位置的代码是这样的

 setters: [],
 execute: function () {
     class MenuItem {  // <-- line 1628

怎么了?

【问题讨论】:

标签: javascript gulp


【解决方案1】:

UglifyJS does not currently support EcmaScript 6 结构 like classes.

您可能需要首先通过转译器步骤运行您的 JavaScript,或者找到一个知道如何处理 ES6 代码的压缩程序。

2017-06-17 更新

设计用于 ES6 的 UglifyJS 分支现已在 npm 上发布为 uglify-es

2018 年 9 月 10 日更新

terser 是新的uglify-esuglify-es is no longer maintained

如果使用gulpnpmjs gulp-uglify-esnpmjs gulp-terser 包都支持 terser。

npm install gulp-terser --save-dev
const gulp = require('gulp');
const terser = require('gulp-terser');
 
function es(){
  return gulp.src('./src/index.js')
    .pipe(terser())
    .pipe(gulp.dest('./build'))
}

gulp.task('default', es);

【讨论】:

  • UglifyJS 应该会更新。似乎有相当多的人使用它,并且会使用它,尤其是在少一步的情况下。
  • @SMT:同意。我得到他们一直在努力的印象。他们现在有一个以uglify-es 发布的“和谐”版本,它放弃了一些向后的 API 兼容性,转而支持 ES6。
  • 是的,我订阅了一个 github 问题,特别是在与此相关的那个 repo 中。仍在进行中的讨论,尚未解决@StriplingWarrior。我的一部分只是想尖酸刻薄地指出 Sputnik 1 花了 3 年时间来设计、创建和发布,但 3 年的时间还不足以添加 ES6 对缩小的支持。 ://
【解决方案2】:

如果你遇到这个问题,并且你事实上有一个像 Babel 这样的转译器步骤,请确保你在 .babelrc 文件中包含正确的 Babel 预设。否则 Babel 只会让你的代码保持原样。

例如

{
  "presets": ["es2015"]
}

【讨论】:

  • 您能详细说明一下吗? .babelrc 文件中究竟应该包含哪些内容?
  • 我添加了一个例子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多