π¨ ts-prune is going into maintanence mode
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.
What will happen
- Critical bug fixes
- Patching vulnerabilities in third party code
What will not happen
- Entertaining feature requests
- Accepting PRs for net new features of refactors
Notes for the future
- 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
ts-prune
Find potentially unused exports in your Typescript project with zero configuration.
Getting Started
ts-prune
exposes a cli that reads your tsconfig file and prints out all the unused exports in your source files.
Installing
Install ts-prune with yarn or npm
# npm
npm install ts-prune --save-dev
# yarn
yarn add -D ts-prune
Usage
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
Examples
Configuration
ts-prune supports CLI and file configuration via cosmiconfig (all file formats are supported).
Configuration options
-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?"
}
FAQ
How do I get the count of unused exports?
ts-prune | wc -l
How do I ignore a specific path?
You can either,
-i, --ignore
configuration option:
1. Use the ts-prune --ignore 'src/ignore-this-path'
grep -v
to filter the output:
2. Use ts-prune | grep -v src/ignore-this-path
How do I ignore multiple paths?
You can either,
-i, --ignore
configuration option:
1. Use the ts-prune --ignore 'src/ignore-this-path|src/also-ignore-this-path'
grep -v
to filter the output:
2. Use multiple ts-prune | grep -v src/ignore-this-path | grep -v src/also-ignore-this-path
How do I ignore a specific identifier?
You can either,
// ts-prune-ignore-next
1. Prefix the export with // ts-prune-ignore-next
export const thisNeedsIgnoring = foo;
grep -v
to ignore a more widely used export name
2. Use ts-prune | grep -v ignoreThisThroughoutMyCodebase