My name is mono.ts
. I'm a minimal example of a typescript mono-repo.
Unlike many similar examples I can do the following, before you build anything:
/packages/line/package.json
:
"test": "mocha --require ts-node/register --require tsconfig-paths/register test/*.ts"
If you click on @geo/point
(/packages/line/src/index.ts
):
import { Point, getDistance } from '@geo/point';
VScode will take you to /packages/point/src/index.ts
- Yarn Workspaces
- Lerna
- Typescript 3 Project References
- Mocha (using ts-node/register)
There are basically two parallel typescript configuration hierarchies.
This tree is using aliases (or paths in typescript world). This allows VSCode to reference the correct files, and tests to run.
/packages/tsconfig.base.json
(common configuration for both pre-build and build configurations)/packages/tsconfig.json
/packages/line/tsconfig.json
This tree uses typescript's project reference for optimised builds.
/packages/tsconfig.base.json
/packages/tsconfig.build.json
/packages/point/tsconfig.build.json
/packages/line/tsconfig.build.json
Note that to build the packages you run (/package.json
):
"build": "tsc --build packages/tsconfig.build.json"
This is allegedly better than letting yarn
or lerna
build the packages in turn based on the dependency tree.