当我运行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特性的代码?
9条答案
按热度按时间6mw9ycah1#
您可以像这样利用gulp-babel...
这将使你的es6在流水线的早期就被传播,并在你缩小的时候大量生产出广泛支持的“普通”javascript。
可能需要注意-正如评论中指出的-核心Babel编译器在这个插件中作为peer dependency发行。如果核心库没有通过你的repo中的另一个dep被下载,确保它安装在你的一端。
查看
gulp-babel
中的对等依赖项,作者指定了@babel/core(7.x)。不过,稍旧的babel-core(6.x)也会起作用。我的猜测是作者(对于两个项目来说是同一个人)正在重新组织他们的模块命名。所以您可以选择以下任何一种方式...或
pprl5pva2#
公认的答案并没有 * 真正 * 回答如何缩小直es6。如果你想缩小es6而不蒸发,gulp-uglify v3.0.0使之成为可能:
2019年3月更新
使用我最初的答案,您肯定希望用terser替换uglify-es包,因为似乎不再维护uglify-es。
原始答案,仍然有效:
1.)首先,升级你的gulp-uglify包到〉3.0.0如果你正在使用yarn并且想更新到最新版本:
2.)现在您可以使用uglify-es(uglify的“es6版本”),如下所示:
如需更多信息:https://www.npmjs.com/package/gulp-uglify
fnvucqvd3#
你实际上可以在不需要翻译的情况下丑化ES6代码。使用
gulp-uglifyes
插件代替gulp-uglify
插件。eoxn13cs4#
吞下丑化
适用于
ES6
及更新版本。1.安装:
npm install --save-dev gulp-uglify
1.安装:
npm install --save-dev gulp-babel @babel/core @babel/preset-env
用法:
tgabmvqs5#
我花了一段时间才让它开始工作。正如其他答案所指出的,问题是 gulp-uglify 不支持ES6。gulp-uglify-es 支持,但不再维护。Terser 是其他人推荐的,但它不适合gulp和
pipe()
。如果你像我一样使用 gulp-uglify,你的
gulpfile.js
看起来像这样:但是,您可以使用 gulp-terser 包,它非常容易替换,并获得相同的功能:
lmvvr0a86#
使用gulp-uglify-es而不是gulp-uglify帮助我完美地完成了您所要求的任务
tquggr8v7#
目前(2021年11月)最简单的方法是使用
gulp-terser
。如果你已经在使用
gulp-uglify
,那么只需安装gulp-terser
,并将“uglify”改为“terser”,你就完成了。xxslljrj8#
不幸是,现在您不能将
uglify
与es-next
代码一起使用,您可以:1.使用Babel传输到
ES5
1.使用
Babili
代替 Uglify。z9zf31ra9#
Webpack可以完成这项工作