【问题标题】:Any ideas on how to remove an ES7 decorator?关于如何删除 ES7 装饰器的任何想法?
【发布时间】:2015-11-24 11:59:08
【问题描述】:

我有一些开发装饰器,例如@timer@checkOptimizations 等。我正在尝试弄清楚如何在生产中删除它们。示例类:

class Foo {
  @timer
  bar() {
  }
}

现在我可以通过将装饰器替换为无操作函数来轻松地使它们成为 function。但是生成的代码非常繁重(基本类是 1640 字节未压缩与 353 字节没有装饰器)。

【问题讨论】:

  • 为您使用的转译器实现一个插件,以便它在翻译之前删除节点。
  • @zerkms -- 好的,关于将装饰器标记为死代码的有效语法有什么想法吗?我宁愿不发明一些东西:)
  • 将其设为您的插件参数,以便删除所有 @timers。否则我想不出有什么比装饰器前的明确评论更可怕的东西,例如:// dead code decorator ;-D
  • 顺便说一句,你可以有一个@dead(['timer']) - 一个参数化的装饰器,它接受一个带有在翻译过程中必须删除的装饰器的数组。
  • @zyklus: 用@dead 标志装饰装饰器函数?

标签: javascript decorator ecmascript-2016


【解决方案1】:

我已经构建了一个插件来解决这个问题。它会在转译代码之前移除 所有 装饰器。当我们想要对我们的代码进行单元测试时,我们会使用它,因为我们不希望将装饰器应用于测试中的“单元”(即类)。

这里是: https://github.com/vladpalos/babel-plugin-remove-decorators

如果你只想删除某些装饰器,你可能想使用这个: https://github.com/elierotenberg/babel-plugin-strip-decorator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2016-02-11
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多