{"id":18985,"library":"babel-dead-code-elimination","title":"Babel Dead Code Elimination","description":"A library providing composable primitives for dead code elimination in Babel AST, version 1.0.12. It is not a Babel plugin but a set of utilities (deadCodeElimination, findReferencedIdentifiers) to integrate into custom transforms. Released as a stable package with frequent patches, it differs from full-featured plugins by offering fine-grained control and working directly with the AST. Main use cases: removing unused variables, handling side-effects carefully via referenced identifier tracking, and preserving runtime behavior (e.g., object rest patterns). Ships TypeScript types.","status":"active","version":"1.0.12","language":"javascript","source_language":"en","source_url":"https://github.com/pcattori/babel-dead-code-elimination","tags":["javascript","babel","dead","code","elimination","typescript"],"install":[{"cmd":"npm install babel-dead-code-elimination","lang":"bash","label":"npm"},{"cmd":"yarn add babel-dead-code-elimination","lang":"bash","label":"yarn"},{"cmd":"pnpm add babel-dead-code-elimination","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Required for parsing source code into AST in the quickstart example.","package":"@babel/parser","optional":false},{"reason":"Required for generating code from AST after elimination.","package":"@babel/generator","optional":false},{"reason":"Needed when using custom transforms with findReferencedIdentifiers.","package":"@babel/traverse","optional":true}],"imports":[{"note":"Named export, not default. This is ESM. For CommonJS, use const { deadCodeElimination } = require('babel-dead-code-elimination').","wrong":"import deadCodeElimination from 'babel-dead-code-elimination'","symbol":"deadCodeElimination","correct":"import { deadCodeElimination } from 'babel-dead-code-elimination'"},{"note":"Also a named export. CommonJS require destructuring works but named import is preferred for ESM.","wrong":"const findReferencedIdentifiers = require('babel-dead-code-elimination').findReferencedIdentifiers","symbol":"findReferencedIdentifiers","correct":"import { findReferencedIdentifiers } from 'babel-dead-code-elimination'"},{"note":"The package ships TypeScript types but does not export them directly (e.g., no 'types' export). You can import the functions as usual and types are inferred.","wrong":"","symbol":"types","correct":"import type { ... } from 'babel-dead-code-elimination'"}],"quickstart":{"code":"import { parse } from '@babel/parser'\nimport generate from '@babel/generator'\nimport { deadCodeElimination } from 'babel-dead-code-elimination'\n\nconst source = `\nconst a = 1\nconst b = 2\nconsole.log(a)\n`\nconst ast = parse(source, { sourceType: 'module' })\ndeadCodeElimination(ast)\nconst result = generate(ast).code\nconsole.log(result)\n// Expected output: \"const a = 1;\\nconsole.log(a);\"","lang":"typescript","description":"Parses a module, eliminates unreferenced variable 'b', then regenerates code. Shows basic usage."},"warnings":[{"fix":"Use findReferencedIdentifiers before transforms and pass the set as second argument to deadCodeElimination to preserve existing references.","message":"deadCodeElimination will remove variables even if they have side-effects in their initializer (e.g., const x = sideEffect()) unless you pass a set of referenced identifiers.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Upgrade to >=1.0.5 to avoid eliminating function expressions.","message":"In v1.0.5 and earlier, function expressions were incorrectly eliminated. This was fixed in v1.0.4 and v1.0.5.","severity":"deprecated","affected_versions":"<1.0.4"},{"fix":"Ensure your code does not rely on elimination of unused variables in object patterns with rest elements (e.g., let { a, ...rest } = obj;).","message":"In v1.0.9, object pattern rest elements behave differently: unused variables before rest are preserved to avoid changing rest output.","severity":"breaking","affected_versions":">=1.0.9"},{"fix":"If you rely on elimination of arrow functions, reconsider the design; they are safe from removal.","message":"Arrow functions and function expressions are never eliminated because they do not add names to outer scope. Only variable declarators referencing them can be eliminated.","severity":"gotcha","affected_versions":">=1.0.5"},{"fix":"Upgrade to >=1.0.8 to ensure const/let iterators are preserved.","message":"For-loop iterator variables (var, let, const) in for...of/for...in are not eliminated since v1.0.7, but earlier versions only preserved var.","severity":"gotcha","affected_versions":"<1.0.7"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"Run npm install babel-dead-code-elimination. Use import { ... } from 'babel-dead-code-elimination' for ESM, or const { ... } = require('babel-dead-code-elimination') for CommonJS.","cause":"Package not installed or CommonJS/ESM mismatch (e.g., using require in ESM project).","error":"Cannot find module 'babel-dead-code-elimination'"},{"fix":"Use named import: import { deadCodeElimination } from 'babel-dead-code-elimination'.","cause":"Using default import instead of named import.","error":"TypeError: deadCodeElimination is not a function"},{"fix":"Set type: 'module' in package.json or use .mjs extension. Alternatively, use require.","cause":"Running TypeScript without module configuration or using ESM syntax in CommonJS environment.","error":"Cannot use import statement outside a module"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}