Build monorepo project on netlify

Hello,

I am working on a monorepo gatsby project that I would like to deploy on Netlify. I am using yarn workspaces to manage the different projects in one repo. I’ve set up a demo repo to show my problem:
https://github.com/chrfritsch/netlify-monorepo

In netlify I configured the example folder as base directory. The example project has a dependency on the theme project. The theme project is not published on npm.

I’ve read on Build configuration overview | Netlify Docs that there is some kind of monorepo support now.

The deployment fails, because the theme project is not published on npm. And I don’t want to do that.

Any ideas what to do?

Thank you,
Christian

1 Like

@chrfritsch, welcome to our Netlify community site. :slightly_smiling_face:

Is this a private NPM package? If so, the following topic may have the solution:

If not, or if there are other questions, please let us know.

It’s not a private npm package, it’s a monorepo. All packages are in the same repository. I want to deploy the example packages, which uses the theme package.

I think the problem is, that the example package does not have a yarn.lock. Because lock files are stored in the root directory in monorepos. And because there is no lock file, netlify tries to build via npm instead of yarn.

1 Like

In case of monorepos that use yarn workspace I guess using base is not what you want.

Our monorepo feature is built for repos that have their frontend in a subdirectory along with the yarn.lock
E.g. a Golang backend that has docs in /docs or a microservice architecture with the frontend in the same repo under /frontend
For these kinds of sites the base setting is crucial, because otherwise our buildbot can’t detect & cache dependencies.

You have several options:

  • Use e.g. yarn build as a build command which will run it in all packages, detecting dependencies correctly
  • Use yarn --cwd packages/package_to_deploy build for running a command from a specific package

Using something like yarn workspace example build in the base directory builds at least the site. But caching doesn’t work. So on every build netlify does a full yarn install. I think it’s because in example/node_modules/.bin there are some symbolic links to /node_modules/

Any further ideas? I would really like to use Netlify for my project. It’s a multisite project where 10 sub-sites are sharing one local gatsby-theme.

With 10 sites in one Netlify team, 300min of build time are pretty precious.

hey @chrfritsch - did you see this? just out!

Yes, but that doesn’t help. That’s for repos that have completely different projects in one repo, like @marcus mentioned earlier.

I think what really needs to be fixed is https://github.com/netlify/build-image/issues/196

Thanks @chrfritsch, and I agree. Thanks for chiming in there in that issue.

Any update on this? I’m also trying to configure deployment pipeline for a monorepo using Yarn Workspaces where each package (other than one called shared) is a separate static site. But I only have one lockfile at the monorepo root so I’m unable to set things up.

No updates on this feature, no. I guess I don’t understand why your build fails exactly; it’s possible we can help you find a workaround (it wouldn’t be brilliant, but it could likely work). Regardless, as promised, we’ll post here if things change (or you can follow this issue: Support for monorepos, including lerna or yarn workspaces · Issue #196 · netlify/build-image · GitHub)

PR’s are welcome if you have a suggestion about how to better implement it though! This is likely the only file that would need changing: