ts-eager v2.0.2
ts-eager
Fast TypeScript runner and register hook with eager compilation.
Similar to ts-node, except it uses esbuild – an extremely fast TypeScript transpiler – to eagerly compile all included files from your tsconfig.json on startup. This makes a noticeable difference for tasks where you're likely to load a good portion of your TS files, eg running tests.
It falls back to lazy compilation if a file is require'd that's not in tsconfig.json, and will also fallback to ts-node (if it's installed) for any type-specific compilation that esbuild doesn't support (such as emitDecoratorMetadata). It will also optionally require tsconfig-paths for paths support if your tsconfig needs it.
Installation
npm install -D ts-eager
# Optional, but recommended: for determining files from tsconfig.json
npm install -D typescript
# Optional, if you need emitDecoratorMetadata support
npm install -D ts-node
# Optional, if you need paths support
npm install -D tsconfig-pathsUsage
ts-eager myfile.tsOr as a require hook:
node -r ts-eager/register myfile.tsConfiguration
ts-eager doesn't have any specific command-line options – it invokes node and passes all command-line arguments through.
It supports these environment variables:
TS_EAGER_LOGLEVEL: 'error' (default), 'warning', 'info', 'silent'TS_NODE_PROJECT: tsconfig file (default tsconfig.json)TS_NODE_IGNORE: comma separated regexes to skip compilation completely
Examples
If you want to customize which files ts-eager compiles up-front, you can specify a different tsconfig.json using TS_NODE_PROJECT, and then use the standard TypeScript include/exclude options in your config.
For example, if this was in tsconfig.test.json:
{
"extends": "./tsconfig.json",
"include": ["test"],
"exclude": ["**/*.template.ts"]
}Then you could run mocha like this:
TS_NODE_PROJECT=tsconfig.test.json mocha -r ts-eager/registerAnd it would only eagerly compile files in test, and exclude any matching *.template.ts.
mocha also supports adding require hooks in .mocharc.json:
{
"recursive": true,
"require": ["ts-eager/register"],
"timeout": 5000
}