grunt-contrib-uglify不解析"让"关键字?

时间:2015-08-17 16:12:47

标签: javascript uglifyjs grunt-contrib-uglify

我收到了错误,

  

'意外的令牌:名称(bazz)'

当我的grunt任务正在运行uglify时。 我在那条线上唯一注意到的是我正在使用' let'关键字而不是' var',所以我不确定为什么会抛出这个错误。

我有一个if else语句,每个都有let varName,即:

function foo (bar) {
    if (condition) {
        let bazz = fn();
        //doSomething with bazz
        _.assign(bar, bazz);
    } else {
        let bazz = fn2();
        //doSomething different with bazz
        _.assign(bar, bazz);
    }
}

我可以通过在if else子句之前使用var bazz = {};来改变它,但我想避免这种情况,因为我必须将bazz分配给fn()和fn2(),无论如何。

想知道是否有其他人遇到过这个以及他们做了什么来修复它。提前谢谢!

2 个答案:

答案 0 :(得分:18)

在仔细研究了这个话题后,我发现grunt-contrib-uglify和gulp-uglify将UglifyJS作为依赖,它不支持ES6" Harmony"然而。关注https://github.com/mishoo/UglifyJS2/issues/448以获取更新。

您还可以使用grunt-babel等工具将ES6代码编译为ES5。

答案 1 :(得分:0)

我在官方gulp-uglify npm页面上看到了以下内容。

注意建议:

  

为了帮助正确处理Node流的错误情况,请执行此操作   项目建议使用pump。有关详细信息,请参阅Why Use Pump?

我在上面的例子中的实现是:

<强> gulpfile.js

var gulp = require('gulp');  
var pump = require('pump');  

// the npm page states:  
// can be a git checkout or another module 
// (such as `uglify-js-harmony` for ES6 support)
var uglifyjs = require('uglify-js-harmony');   
var minifier = require('gulp-uglify/minifier');  

var concat = require('gulp-concat');

gulp.task('compress', function (cb) {  
  // the 'options' argument is included in the example, 
  // but i don't know what it does or how it can be removed  
  var options = {  
    preserveComments: 'license'  
  };  

  pump([  
      gulp.src('my_scripts/*.js'),  // gets all js scripts in this folder  
      minifier(options, uglifyjs),  
      concat('my_bundled_script.js'), // concatenates all scripts into this file  
      gulp.dest('dist')  // puts the file into this folder
    ],cb 
  );  
});  

<强>的package.json

{
  "devDependencies": {
    "gulp": "latest",
    "pump": "latest",
    "gulp-concat": "latest",
    "gulp-uglify": "latest",
    "uglify-js-harmony": "latest"
  },
  "dependencies": {}
}

<强>结果

不使用uglify-js-harmony

  • pump有助于找到错误的来源(使用gulp-uglify时)
  • 具有let语句导致错误的文件

使用uglify-js-harmony时,未发生错误。

其他注意事项:

上面的页面目前显示:

// can be a git checkout or another module  
// (such as `uglify-js-harmony` for ES6 support)
var uglifyjs = require('uglify-js');

但是在安装uglify-js-harmony时,我收到了警告消息:

  

npm WARN弃用uglify-js-harmony@2.7.7:弃用赞成   丑化-ES

但是,当我尝试使用uglify-es代替uglify-js-harmony时,我收到了一条错误消息,类似于此处记录的消息:

https://github.com/terinjokes/gulp-uglify/issues/287

我试图从那里关注问题主题,但迷路了,无法找到如何实施uglify-es的明确解决方案。