【问题标题】:some es6 features are not understood by grunt uglify js?grunt uglify js 不理解一些 es6 功能?
【发布时间】:2016-11-20 15:20:00
【问题描述】:

我在我的项目中使用了 grunt-uglify,我正在使用 es6。对于某些 es6 功能,例如胖箭头函数,它会引发错误。我认为 uglify 不理解这种语法。所以我有办法解决这个问题。我的意思是我可以使用任何东西让 uglify 理解所有 es6 语法吗?

【问题讨论】:

    标签: javascript gruntjs ecmascript-6 grunt-contrib-uglify


    【解决方案1】:

    官方还没有缩小 ES6 的工具(Google Closure 编译器等其他工具支持 ES6,但它会将其转换为“传统 js”,然后将其缩小)。

    虽然 UglifyJs 并不支持所有的 es6 功能,但the Harmony branch of UglifyJS2 似乎支持箭头功能和其他功能。

    You can read the discussion about it in the issue of github here。似乎没有其他选择可以等待(或创建自己的 ES6 缩小器)。

    更新

    现在你有 2 个选项来缩小 ES6:

    【讨论】:

    • 有什么消息吗?
    • 撞! 2019年了..仍然面临丑陋无法接受“让”。
    • 2021 现在已部分实施。不支持.?运营商,但我还没有发现其他问题......
    • 另外 * 的生成器函数似乎还没有被理解。
    【解决方案2】:

    如果生成的代码不需要使用 ES6 语法,也可以在丑化代码之前将 ES6 转换为 ES5。例如,这可以通过 Grunt 任务 grunt-es6-transpiler 来完成。

    【讨论】:

      【解决方案3】:

      您可以使用grunt-contrib-uglifyharmony 分支。

      npm install git://github.com/gruntjs/grunt-contrib-uglify.git#harmony --save-dev
      

      与 es6 完美配合。不需要对 grunt 进行额外设置。

      【讨论】:

      • 这是唯一对我有用的,但它只有在 Gruntfile 中添加 grunt.loadNpmTasks('grunt-contrib-uglify-es'); 这个 javascript 行之后才有效,如 official GitHub page 中所述。
      • grunt-contrib-uglify.git#harmony 现已弃用
      【解决方案4】:

      我刚刚更新到 uglify-js@2.8.29 并且成功了。

      【讨论】:

        【解决方案5】:

        现在可以使用 用于 ES6+ 的 Grunt 插件 ES6 解析器、mangler/compressor 和美化工具包

        https://github.com/adascal/grunt-terser

        干得好,按预期工作。

        grunt-contrib-uglifyharmony 分支已弃用,它不是一个可持续的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多