Refer to the CHANGELOG for all info.
---------
Co-authored-by: Wouter van Wageningen <wouter.vdub@yahoo.com>
Co-authored-by: Josh Munic <jpmunic@gmail.com>
Co-authored-by: Jonathan Haas <haasjona@gmail.com>
Recently I refactored the prebuild code. One thing I did not touch (yet)
was the various site dependencies. They were then ported to NX over the
previous system with build priorities we had in place. And while that
was a welcome improvement, it did not really address the bigger picture:
we don't actually need to build any of these dependencies to build the
site.
All we need to do is help NodeJS so it can resolve everything from the
source. So this commit does that by adding a top-level run script
`yarn buildsiteconfigure` which calls `yarn reconfigure` but with the
BUILDSITE variable set.
When that variable is set, the reconfigure script will skip all optional
steps and generate a slightly different package.json file that tells
NodeJS to looks the package from source, rather than to look for the
build files.
After running this script, the prebuild step for the various sites will
run without problems, even on a fresh repo where nothing has ever been
build.
So I've updated the prebuild script in the sites to run this. For local
development, please use `uyarn predev` so that you don't muck with all
the package.json files.
If you do so (by accident or not) a `yarn reconfigure` run will put
everything back in its place.
These are some changes in the way the monorepo is structured,
that are aimed at making it easier to get started.
There are two important changes:
**Multiple workspaces**
We had a yarn workspaces setup at `packages/*`. But our monorepo has
grown to 92 packages which can be overwhelming for people not familiar
with the package names.
To remedy this, I've split it into 4 different workspaces:
- `designs/*`: Holds FreeSewing designs (think patterns)
- `plugins/*`: Holds FreeSewing plugins
- `packages/*`: Holds other packages published on NPM
- `sites/*`: Holds software that is not published as an NPM package,
such as our various websites and backend API
This should make it easier to find things, and to answer questions like
*where do I find the code for the plugins*.
**Updated reconfigure script to handle build order**
One problem when bootstrapping the repo is inter-dependencies between
packages. For example, building a pattern will only work once
`plugin-bundle` is built. Which will only work once all plugins in the
bundle or built. And that will only work when `core` is built, and so
on.
This can be frustrating for new users as `yarn buildall` will fail.
And it gets overlooked by seasoned devs because they're likely to have
every package built in their repo so this issue doesn't concern them.
To remedy this, we now have a `config/build-order.mjs` file and the
updated `/scripts/reconfigure.mjs` script will enforce the build order
so that things *just work*.