当字符串以`字符开头时,Grunt uglify抛出解析错误

时间:2016-11-18 07:14:32

标签: gruntjs grunt-contrib-uglify

我正在运行grunt uglify任务来缩小我的js文件,但是当字符串以`character开头时,它给了我错误。

我的字符串看起来像这样

var html = `<div class='list-item'>
              <span>ABC</span>
           </div>`;

我的Gruntfile.js uglifyjs块就像这样

uglify: {
  'dev': {
       options: {
          mangle: false
       },
       files: {
          'common/utility_functions.js': ['common/utility_functions.js']
       }
   }
}

当我运行grunt uglify时,它会给我以下错误

>> Uglifying source common/utility_functions.js failed.
   Warning: Uglification failed.
   SyntaxError: Unexpected character '`'.
   Line 162 in common/utility_functions.js
   Use --force to continue.

任何人都可以帮忙解决这个问题吗?我认为使用`字符是有效的。它在jshint过程中没有给我错误,因为我在jshint选项中添加了enext:true。

1 个答案:

答案 0 :(得分:9)

编辑:更新的答案2

grunt-contrib-uglify-es版本现已发布到npm。这是我在GitHub上的和谐分支,我在之前的更新答案中提到过。但是,它可以通过运行以下命令的npm直接安装:

npm i -D grunt-contrib-uglify-es

编辑:更新答案

自回答此问题后,grunt-contrib-uglify的{​​{3}}分支已可用。此版本处理harmony和其他ES6语法功能。

安装grunt-contrib-uglify和谐分支:

  1. 首先通过CLI运行以下命令,卸载当前版本的grunt-contrib-uglify

    npm un -D grunt-contrib-uglify
    
  2. 接下来通过运行以下来安装和声分支:

    npm i -D https://github.com/gruntjs/grunt-contrib-uglify.git#harmony
    

    (注意harmony分支在npm注册表中不可用,所以我们直接通过GitHub安装它

  3. 您的package.json现在将包含以下代码段:

    ...
    "devDependencies": {
        ...
        "grunt-contrib-uglify-es": "git+https://github.com/gruntjs/grunt-contrib-uglify.git#harmony"
        ...
    }
    ...
    
  4. 按正常方式运行uglify任务,您将不会遇到错误消息。

  5. 原始答案

    您的字符串使用ES6 Template Literals语法,ES6 Template Literalgrunt-contrib-uglify使用的JavaScript解析器/管理器/压缩器)不支持此功能。

    有关详细信息,请参阅此uglify-js的答案。

    如果您的项目需要使用ES6功能,请考虑使用post之类的JavaScript转换程序来转换代码,然后使用grunt-contrib-uglify对结果ES5代码进行uglification。

    或者,如果ES6模板文字是项目使用的ES6语法的唯一部分,则始终可以选择恢复为旧字符串而不是字符串。 E.g。

    var html = '<div class=\'list-item\'' +
                  '<span>ABC</span>' +
               '</div>';
    

    上面显示的示例代码将由grunt-contrib-uglify成功处理。

相关问题