Use this to load modules whose location is specified in the
paths section of
tsconfig.json. Both loading at run-time and via API are supported.
Typescript by default mimics the Node.js runtime resolution strategy of modules. But it also allows the use of path mapping which allows arbitrary module paths (that doesn't start with "/" or ".") to be specified and mapped to physical paths in the filesystem. The typescript compiler can resolve these paths from
tsconfig so it will compile OK. But if you then try to exeute the compiled files with node (or ts-node), it will only look in the
node_modules folders all the way up to the root of the filesystem and thus will not find the modules specified by
If you require this package's
tsconfig-paths/register module it will read the
tsconfig.json and convert node's module loading calls into to physcial file paths that node can load.
How to install
yarn add --dev tsconfig-paths
npm install --save-dev tsconfig-paths
How to use
node -r tsconfig-paths/register main.js
ts-node -r tsconfig-paths/register main.ts
process.env.TS_NODE_PROJECT is set it will be used to resolved tsconfig.json
For webpack please use the tsconfig-paths-webpack-plugin.
With mocha and ts-node
As of Mocha >= 4.0.0 the
--compiler was deprecated. Instead
--require should be used. You also have to specify a glob that includes
.ts files because mocha looks after files with
.js extension by default.
mocha -r ts-node/register -r tsconfig-paths/register "test/**/*.ts"
With other commands
As long as the command has something similar to a
--require option that can load a module before it starts, tsconfig-paths should be able to work with it.
Bootstraping with explicit params
If you want more granular control over tsconfig-paths you can bootstrap it. This can be useful if you for instance have compiled with
tsc to another directory where
tsconfig.json doesn't exists.
const tsConfig = ;const tsConfigPaths = ;const baseUrl = "./"; // Either absolute or relative path. If relative it's resolved to current working directory.const cleanup = tsConfigPaths;// When path registration is no longer needed;
Then run with:
node -r ./tsconfig-paths-bootstrap.js main.js
You can set options by passing them before the script path, via programmatic usage or via environment variables.
ts-node --project customLocation/tsconfig.json -r tsconfig-paths/register "test/**/*.ts"
CLI and Programmatic Options
Environment variable denoted in parentheses.
-P, --project [path]Path to TypeScript JSON project file (
Config loading process
- Use explicit params passed to register
process.env.TS_NODE_PROJECTto resolve tsConfig.json and the specified baseUrl and paths.
- Resolves tsconfig.json from current working directory and the specified baseUrl and paths.
The public API consists of these functions:
- createMatchPath / createMatchPathAsync
- matchFromAbsolutePaths / matchFromAbsolutePathsAsync
/*** Installs a custom module load function that can adhere to paths in tsconfig.*/;
This function will patch the node's module loading so it will look for modules in paths specified by tsconfig.json. A function is returned for you to reinstate Node's original module loading.
This function loads the tsconfig.json. It will start searching from the specified
/*** Function that can match a path*//*** Creates a function that can resolve paths according to tsconfig paths property.* @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.* @param paths The paths as specified in tsconfig.* @param mainFields A list of package.json field names to try when resolving module files.* @param addMatchAll Add a match-all "*" rule if none is present* @returns a function that can resolve paths.*/
createMatchPath function will create a function that can match paths. It accepts
paths directly as they are specified in tsconfig and will handle resolving paths to absolute form. The created function has the signare specified by the type
/*** Finds a path from tsconfig that matches a module load request.* @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.* @param requestedModule The required module name.* @param readJson Function that can read json from a path (useful for testing).* @param fileExists Function that checks for existance of a file at a path (useful for testing).* @param extensions File extensions to probe for (useful for testing).* @param mainFields A list of package.json field names to try when resolving module files.* @returns the found path, or undefined if no path was found.*/
This function is lower level and requries that the paths as already been resolved to absolute form and sorted in correct order into an array.
This is the async version of
createMatchPath. It has the same signature but with a callback parameter for the result.
This is the async version of
matchFromAbsolutePaths. It has the same signature but with a callback parameter for the result.