babel-dead-code-elimination
Composable primitives for dead code elimination in Babel
This package is not a Babel plugin, but rather a set of composable primitives to author your own Babel transforms and plugins.
Install
npm install babel-dead-code-elimination
deadCodeElimination
Eliminates unused code from the Babel AST by repeatedly removing unreferenced identifiers.
import { parse } from "@babel/parser"
import generate from "@babel/generator"
import { deadCodeElimination } from "babel-dead-code-elimination"
let source = "..."
let ast = parse(source, { sourceType: "module" })
deadCodeElimination(ast)
let result = generate(ast).code
findReferencedIdentifiers
Find identifiers that are currently referenced in the Babel AST.
Useful for limiting deadCodeElimination
to only eliminate newly unreferenced identifiers,
as a best effort to preserve any intentional side-effects in the source.
import { parse } from "@babel/parser"
import generate from "@babel/generator"
import traverse from "@babel/traverse"
import {
deadCodeElimination,
findReferencedIdentifiers,
} from "babel-dead-code-elimination"
let source = "..."
let ast = parse(source, { sourceType: "module" })
let referenced = findReferencedIdentifiers(ast)
traverse(ast, {
/* ... your custom transform goes here ... */
})
deadCodeElimination(ast, referenced)
let result = generate(ast).code
Prior art
Credit to Jason Miller for the initial implementation.
Thanks to these projects for exploring dead code elimination: