The GitHub repository of Norska uses a monorepo setup. Each folder in the
./modules
directory is a different node module. The ./lib
directory is
the one published as norska
, while all the others are dependencies. Each
dependency is focused on one task (./css
is publshed as norska-css
and
handles CSS compilation for example).
This split makes development easier as each module, by definition, forces
a separation of concerns. This also has the added advantage of having one
package.json
per module, making the list of dependencies clearer to reason
about.
Lerna is used to simplify the tooling needed around the modules, more
specifically the release part. Whenever a new version of norska
is published,
all modules are released with a new version matching the master version.
The repo also takes advantage of the workspace feature offered by Yarn. In
practice, this means that a single yarn install
at the root of the git repo
will install all the dependencies of all the modules, in the top
./node_modules
folder.
All development tooling (test, lint and release) is meant to be executed on the repo (as opposed as on the modules), so the config for those tools is defined in the repo root.