26

我收到一个错误,

'意外的令牌:名称(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() 。

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

4

2 回答 2

20

在对该主题进行了更多研究之后,我发现 grunt-contrib-uglify 和 gulp-uglify 将 UglifyJS 作为依赖项,并且它还不支持 ES6“Harmony”。按照https://github.com/mishoo/UglifyJS2/issues/448进行更新。

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

于 2015-08-20T18:25:21.847 回答
0

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

注意建议:

为了帮助正确处理节点流的错误情况,该项目建议使用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 
  );  
});  

包.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:不推荐使用以支持 uglify-es

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

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

我试图从那里关注问题线程,但迷路了,找不到如何实施的最终解决方案uglify-es

于 2017-05-20T07:54:56.080 回答