More details
I started ts-prune to find a sustainable way to detect unused exports in Typescript code. Due to the absence of native APIs that enable this, the best way forward was to consolidate a few hacks together that did this semi-elegantly for most usecases.
However, due to the popularity of ts-prune, it has absorbed more use cases, and complexity has bloated to the point that I'm no longer comfortable to add more features or do any other changes to the core system.
The most important thing for ts-prune is to be backwards compatible and reliable for existing use cases.
- Critical bug fixes
- Patching vulnerabilities in third party code
- Entertaining feature requests
- Accepting PRs for net new features of refactors
- This is a feature Typescript should support natively, and each "hack" has a bunch of trade-offs.
- Due to the sheer fragmentation of TS/JS ecosystem between frameworks, package managers etc a non-native solution will result in complexity bloat.
- At this point, the maintainer has two choices
- Aggresively defend against feature requests, changes and anger the open-source community
- Accept complexity bloat, and dedicate time and energy for compaction
Find potentially unused exports in your Typescript project with zero configuration.
ts-prune
exposes a cli that reads your tsconfig file and prints out all the unused exports in your source files.
Install ts-prune with yarn or npm
# npm
npm install ts-prune --save-dev
# yarn
yarn add -D ts-prune
You can install it in your project and alias it to a npm script in package.json.
{
"scripts": {
"find-deadcode": "ts-prune"
}
}
If you want to run against different Typescript configuration than tsconfig.json:
ts-prune -p tsconfig.dev.json
ts-prune supports CLI and file configuration via cosmiconfig (all file formats are supported).
-p, --project
- tsconfig.json path(tsconfig.json
by default)-i, --ignore
- errors ignore RegExp pattern-e, --error
- return error code if unused exports are found-s, --skip
- skip these files when determining whether code is used. (For example,.test.ts?
will stop ts-prune from considering an export in test file usages)-u, --unusedInModule
- skip files that are used in module (marked asused in module
)
CLI configuration options:
ts-prune -p my-tsconfig.json -i my-component-ignore-patterns?
Configuration file example .ts-prunerc
:
{
"ignore": "my-component-ignore-patterns?"
}
ts-prune | wc -l
You can either,
ts-prune --ignore 'src/ignore-this-path'
ts-prune | grep -v src/ignore-this-path
You can either,
ts-prune --ignore 'src/ignore-this-path|src/also-ignore-this-path'
ts-prune | grep -v src/ignore-this-path | grep -v src/also-ignore-this-path
You can either,
// ts-prune-ignore-next
export const thisNeedsIgnoring = foo;
ts-prune | grep -v ignoreThisThroughoutMyCodebase