Gulp uglify无法处理箭头功能

Par*_*xis 21 javascript ecmascript-6 gulp gulp-uglify

我正在尝试使用压缩我的项目gulp-uglify,但是Unexpected token: punc ()每当遇到代码中的箭头函数时,gulp似乎都会抛出错误.有什么办法可以解决这个问题吗?谢谢.

大口喝,崩溃test.js

// Function with callback to simulate the real code
function test(callback) {
    if (typeof callback === "function") callback();
}

// Causes a crash
test(() => {
    console.log("Test ran successfully!");
});

// Doesn't cause a crash
test(function () {
    console.log("Test ran successfully!");
});
Run Code Online (Sandbox Code Playgroud)

gulpfile.js

var gulp = require("gulp");
var concat = require("gulp-concat");
var uglify = require("gulp-uglify");

gulp.task("scripts", function() {
    gulp.src([
        "./gulp-crash-test.js"
    ]).pipe(
        concat("gulp-crash-test.min.js")
    ).pipe(
        uglify().on('error', function(e){
            console.log(e);
        })
    ).pipe(
        gulp.dest("./")
    );
});

gulp.task("watch", function() {
    gulp.watch("./gulp-crash-test.js", ["scripts"]);
});

gulp.task("default", ["watch", "scripts"]);
Run Code Online (Sandbox Code Playgroud)

小智 24

箭头功能是ES6功能.Babel(以及其他)旨在将ES6转换为ES5或更早版本,作为构建过程的一部分.幸运的是有Gulp和Grunt的Babel插件.在uglify之前运行Babel.

https://www.npmjs.com/package/gulp-babel

我希望这会引导你朝着正确的方向前进/某人可以展示一些代码.

  • 是不是可以让uglify与ES6一起工作? (3认同)
  • 出现的最新模块是gulp-ugligy-es,它将处理ES6。提及的其他模块已弃用/不再受支持。参考:https://www.npmjs.com/package/gulp-uglify-es (2认同)

sup*_*rui 23

ES6语法没有支持ugilify(minify)工具.你应该在babel编译后构建gulp任务(es6 - > es5)

1.安装包

npm install gulp-babel babel-preset-es2015

2.更改您的代码如下.

    var gulp = require("gulp");
    var concat = require("gulp-concat");
    var uglify = require("gulp-uglify");
    var babel  = require('gulp-babel');

    gulp.task("scripts", function() {
        return gulp.src(["./gulp-crash-test.js"])
    .pipe(babel({presets: ['es2015']}))
    .pipe(concat("gulp-crash-test.minjs"))
    .pipe(uglify().on('error', function(e){
         console.log(e);
    }))
    .pipe(gulp.dest("./"))
    });
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么人们在这里给出了babel的建议,问题显然是如何缩小ecma6代码,而这个问题仍然没有答案 (13认同)

Gab*_*eim 11

您可以使用babel minify(以前的Babili)基于babel的库来缩小ES6代码而无需进行转换:

首先通过npm安装:

npm install --save-dev babel-preset-minify
Run Code Online (Sandbox Code Playgroud)

然后在你的gulp文件中:

var gulp = require('gulp')
var babel = require('gulp-babel')
gulp.task('default', () => {
  return gulp.src('src/app.js')
  .pipe(babel({presets: ['minify']}))
  .pipe(gulp.dest('dist'))
})
Run Code Online (Sandbox Code Playgroud)

它使用babel作为解析器,但没有转换.