I'm trying to setup a monorepo with 3 services sharing some library code.
This is the current situation:
repo: web
pdf/
package.json
reference to shared-ts using github url
tsconfig.json
frontend/
package.json
reference to shared-ts using github url
tsconfig.json
repo: mobile (react-native)
package.json
reference to shared-ts using github url
tsconfig.json
repo: shared-ts
package.json
tsconfig.json
This works but it's a pain to commit to shared-ts
, build, change the hash in package.json
and commit again.
This is what I'd like to achieve:
repo: monorepo
pdf/
package.json
reference to ../shared-ts
tsconfig.json
frontend/
package.json
reference to ../shared-ts
tsconfig.json
mobile/
package.json
reference to ../shared-ts
tsconfig.json
shared-ts/
package.json
tsconfig.json
So far I've tried:
- TypeScript project references, but it seems like there is no way to have dependencies in the shared-ts project
"shared-ts": "../shared-ts"
in package.json but it copies shared-ts into the node_modules of each package so I have to re-run yarn everytime I make a changeyarn link
inpostinstall
:error TS2307: Cannot find module 'shared-ts' or its corresponding type declarations.
- creating a symlink directly in
postinstall
withln -s ../shared-ts/ node_modules/shared-ts/
but it seems TypeScript fails to find the module npm link
inpostinstall
seems like the most promising but it's really slow and I'm having trouble running it in CI because of some permissions issues.
Is there a good way of doing this? Any ideas on other things I could try?
CodePudding user response:
using yarn workspace & learn
here is an example monorepo-template
CodePudding user response:
I have done the things you are curious about in a recent project. Desired results can be achieved by monorepo using learna and yarn workspace. For details, please go to this link
With the above, we will be creating a package of types. In other packages, we will be just importing types from packages like below:
import { Post } from "@types";
Things are much easier this way than linking packages ourslef.