如何使用 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
仅引用自身也被删除?
我不完全确定 为什么 这有效,因为它没有记录,但如果你在删除路径之前调用 binding.path.scope.crawl()
它会按预期工作 here.
鉴于此输入:
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
仅引用自身也被删除?
我不完全确定 为什么 这有效,因为它没有记录,但如果你在删除路径之前调用 binding.path.scope.crawl()
它会按预期工作 here.