如何使用 gulp-uglify 缩小 ES6 函数?

新手上路,请多包涵

当我运行 gulp 时,出现以下错误:

 [12:54:14] { [GulpUglifyError: unable to minify JavaScript]
cause:
{ [SyntaxError: Unexpected token: operator (>)]
 message: 'Unexpected token: operator (>)',
 filename: 'bundle.js',
 line: 3284,
 col: 46,
 pos: 126739 },
plugin: 'gulp-uglify',
fileName: 'C:\\servers\\vagrant\\workspace\\awesome\\web\\tool\\bundle.js',
showStack: false }

有问题的行包含一个箭头函数:

 let zeroCount = numberArray.filter(v => v === 0).length

我知道我可以将其替换为以下内容以通过放弃 ES6 语法来补救缩小错误:

 let zeroCount = numberArray.filter(function(v) {return v === 0;}).length

如何通过 gulp 缩小包含 ES6 功能的代码?

原文由 Don 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
2 个回答

您可以这样利用 gulp-babel

 const gulp = require('gulp');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');

gulp.task('minify', () => {
  return gulp.src('src/**/*.js')
    .pipe(babel({
      presets: ['es2015']
    }))
    .pipe(uglify())
    // [...]
});

这将在管道的早期转换您的 es6,并在您缩小时生成广泛支持的“普通”javascript。


可能需要注意- 正如评论中指出的那样 - 核心 babel 编译器作为此插件中的 对等依赖 项提供。如果核心库没有通过您的存储库中的另一个 dep 被拉下,请确保它已安装在您的端。

查看 gulp-babel 中的 对等依赖--- 作者正在指定 @babel/core (7.x)。不过,稍旧的 babel-core (6.x) 也可以使用。我的猜测是作者(两个项目的作者相同)正在重组他们的模块命名。无论哪种方式,两个 npm 安装端点都指向 https://github.com/babel/babel/tree/master/packages/babel-core ,因此您可以使用以下任一方式……

 npm install babel-core --save-dev

或者

npm install @babel/core --save-dev

原文由 scniro 发布,翻译遵循 CC BY-SA 4.0 许可协议

接受的答案并没有 真正 回答如何缩小直接 es6。如果你想在不转译的情况下缩小 es6,gulp-uglify v3.0.0 使之成为可能:

2019 年 3 月更新

使用我原来的答案,你肯定想用 terser 替换 uglify -es 包,因为 uglify-es 似乎不再被维护。

原始答案,仍然有效:

1.) 首先,将你的 gulp-uglify 包升级到 > 3.0.0 如果你正在使用 yarn 并想更新到最新版本:

 yarn upgrade gulp-uglify --latest

2.) 现在您可以使用 uglify-es,即 uglify 的“es6 版本”,如下所示:

 const uglifyes = require('uglify-es');
const composer = require('gulp-uglify/composer');
const uglify = composer(uglifyes, console);

gulp.task('compress', function () {
    return gulp.src('src/*.js')
    .pipe(uglify())
    .pipe(gulp.dest('dist'))
});

更多信息: https ://www.npmjs.com/package/gulp-uglify

原文由 KayakinKoder 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题