mykeels.com

Symlinks in Monorepos

What if you could:

Symlinks in Monorepos

What if you could:

  • Sync commonly referenced files across projects in a monorepo?

So that:

  • You only edit common config files once, and all projects using it get updated.

For example:

  • tsconfig.json

  • .npmrc

  • .nvmrc

  • index.html

Oh, how?

Use Symlinks.

Wait, what? Won’t that cause version-control issues? And don’t Symlinks differ across operating systems?

Ignore them in version-control, so they get re-created on every machine.

How would they get re-created?

Git Hooks, running on post-checkout.

And how would we know which symlinks to create?

Use a config file e.g. symlinks.yml in the root of your repo with format:

/path/to/source:
  - /path/to/symlink/1
  - /path/to/symlink/2
  - /path/to/symlink/n
/foo:
  - /bar/foo
  - /baz/foo

Are those absolute paths? Symlink paths are usually relative.

All the paths in the config are relative to the root of the repo, because we need a common starting point to avoid confusion.

Okay, what next?

Write the script.

What script?

THE Script!

npx @mykeels/symlinks

https://www.npmjs.com/package/@mykeels/symlinks

Tags