如何使用 Babel 删除未使用的自引用绑定

How to remove unused binding with self-reference using Babel

鉴于此输入:

const NOT_REFERENCED = 'abc';

class NotReferencedEither extends React.Component {
  static something() {
    // ...
  }
  someMethod() {
    NotReferencedEither.something();
  }
  render() {
    return <span>Foo</span>;
  }
}

还有这个 Babel 插件:

export default function ({types: t}) {
  return {
    visitor: {
      Program(path, state) {
        Object.keys(path.scope.bindings).forEach(bindingName => {
          const binding = path.scope.bindings[bindingName];
          if (!binding.referenced) {
            binding.path.remove();
          }
        });
      },
    }
  };
}

我希望最终得到一个空文件。不幸的是,由于 NotReferencedEither 有对自身的引用,它没有通过删除测试。

我如何扩充此插件,以便 NotReferencedEither 仅引用自身也被删除?

实例:http://astexplorer.net/#/SvYcw6Xggc/4

我不完全确定 为什么 这有效,因为它没有记录,但如果你在删除路径之前调用 binding.path.scope.crawl() 它会按预期工作 here.