moker
No more struggles setting up monorepo tooling. Kick-start monorepos and
workspaces fast:
yarn dlx moker create my-monorepo
cd my-monorepo
yarn moker use prettier husky lint-staged github-actions devcontainer
yarn moker add --template express server
yarn moker add --template cra client
Features
- 👢 Kick-start a monorepo with ease
- 🧰 Monorepo plugins to use pre-configured common tooling
- ➕ Add workspaces on demand
- 🧬 Workspace templates for a library, React app, API or CLI
- ⚡ Extensible, bring your own plugins
🤓 The core plugins make some assumptions you may not agree with. If that's
the case, this tool is probably not for you. The defaults used are documented
below and marked with a nerd-face emoji so you should be able to get a clear
picture of what to expect.
Table of contents
Getting started
Prerequisites
You will need Node v14+ and Yarn v3+ in order to use moker
.
Create monorepo
Create a new monorepo:
yarn dlx moker create my-repo
This will initialize a new monorepo in the my-repo
directory.
⚠️ Note that we use yarn dlx moker
to create a new monorepo. Once we are
inside our monorepo, we can simply use yarn moker
to execute commands.
🤓 The monorepo is initiated with Yarn without Zero-Installs and in legacy
nodeLinker: node-modules
mode because a lot of packages are not yet
compatible with PnP or require a workaround.
Use plugins
Of course you want additional tools installed at the monorepo level, add them
with:
cd my-repo
yarn moker use prettier husky lint-staged
Plugins may work together. For example, lint-staged
will install a pre-commit
hook which formats code if prettier
and husky
are installed. The order in
which plugins are added does not matter.
See the section available plugins for a list of options.
💡 To quickly get started with the most common plugins, use a monorepo
template like so:
yarn dlx moker create --template common my-repo
Add workspace
To add a new workspace (a.k.a. monorepo package) to your monorepo, use:
yarn moker add my-workspace
Workspaces are added in a customizable subdirectory of the monorepo (the default
is packages
).
You can also use a workspace template, e.g.:
yarn moker add --template lib shared
yarn moker add --template express server
yarn moker add --template cra client
yarn moker add --template bandersnatch cli
See the section available templates for a list of
options.
Available plugins
dependabot
monorepo
🚧 This plugin is a work in progress
This plugin adds a
Dependabot
configuration to your monorepo.
devcontainer
monorepo
🚧 This plugin is a work in progress
This plugin sets up devcontainer configuration at the
monorepo level.
github-actions
monorepo
🚧 This plugin is a work in progress
This plugin sets up GitHub Actions at the
monorepo level.
husky
monorepo
This plugin sets up Husky at the monorepo
level.
lint-staged
monorepo
This plugin sets up lint-staged at the
monorepo level.
If you have the prettier
plugin installed, this will setup a task to format
staged files using prettier --write --ignore-unknown
.
If you have the husky
plugin installed, this will setup a pre-commit hook to
run yarn lint-staged
.
prettier
monorepo
This plugin sets up Prettier.
🤓 Prettier is installed with this configuration:
proseWrap: always
We only set this proseWrap
override because we think markdown files should
always be truncated to match whatever the printWidth
setting is. This makes
it so much easier to read and write markdown files!
jest
workspace
This plugin sets up Jest and adds a test
and watch:test
script to both the workspace and the monorepo.
semantic-release
workspace
This plugin sets up
semantic-release.
⚠️ The semantic-release plugin in our monorepo configuration is currently
broken due to
this issue with their npm plugin
typescript
workspace
This plugin sets up TypeScript and adds a
build
and watch:build
script to both the workspace and the monorepo.
Available templates
common
monorepo
This is the only monorepo template at this point. It simply installs these
plugins in the monorepo:
prettier
husky
lint-staged
github-actions
devcontainer
bandersnatch
workspace
Scaffolds a simple bandersnatch CLI
app tool with the typescript and
jest plugins.
cra
workspace
Uses create-react-app to scaffold a React.js
app (web client).
express
workspace
Scaffolds a simple express HTTP app with the
typescript and jest plugins.
lib
workspace
A plain shared library template with the typescript and
jest plugins.
Contributing
Contributions are very welcome!
Roadmap
Also see TODO.md.
Development
To run the moker
CLI from source, run:
yarn start
Note that you can create a new monorepo for testing purposes outside the current
working directory with:
yarn start create /path/to/my-repo
Devcontainer
A devcontainer configuration is included in this repo to
get started quickly.
Credits
©️ Copyright 2022 Joram van den Boezem
♻️ Licensed under the MIT license
🤔 Moker? MOnorepo KickstartER