There are countless guides online for setting up a TypeScript monorepo.
Most rely on external tools like Lerna, Yarn, Turborepo, Yalc, or something else.
Here's a simple, zero-opinion way to get a TypeScript monorepo going.
First, make a structure like this:
root/
package-1/
package.json
tsconfig.json
package-2/
package.json
tsconfig.json
package.json
The root/package.json can be empty, with only the following set:
{
"private": true,
"workspaces": [
"package-1",
"package-2"
]
}Now, assuming package-1 depends on package-2, add this to the tsconfig.json for package-1:
{
...
"references": [
{ "path": "../package-2/" }
]
}And add this to the tsconfig.json for package-2:
{
"compilerOptions": {
...
"composite": true
}
}Now, go into into package-1 and run npm install.
Now, you can install package-2 as a dependency, even though it is not published to npm! Run npm install --save package-2.
Everything is set up now! Notice, if you update TypeScript code in package-2, you don't have to rebuild it or reinstall it. Stuff just works!