Note
If you're migrating an existing package to the monorepo, please see the package migration documentation. You may be able to make use of create-package when migrating your package, but there's a lot more to it.
Manually creating a new monorepo package can be a tedious, even frustrating process. To alleviate that problem, we have created a CLI that automates most of the job for us, creatively titled create-package. To create a new monorepo package, follow these steps:
- Create a new package using
yarn create-package.- Use the
--helpflag for usage information. - Once this is done, you can find a package with your chosen name in
/packages.
- Use the
- Make sure your license is correct.
- By default,
create-packagegives your package an MIT license. - If your desired license is not MIT, then you must update your
LICENSEfile and thelicensefield ofpackage.json.
- By default,
- Update
.github/CODEOWNERSandteams.jsonto assign a team as the owner of the new package. - Add your dependencies.
- Do this as normal using
yarn. - Remember, if you are adding other monorepo packages as dependents, don't forget to add them to the
referencesarray in your package'stsconfig.jsonandtsconfig.build.json.
- Do this as normal using
And that's it!
Along with this documentation, create-package is intended to be the source of truth for the process of adding new packages to the monorepo. Consequently, to change that process, you will want to change create-package.
The create-package directory contains a template package. The CLI is not aware of the contents of the template, only that its files have placeholder values. When a new package is created, the template files are read from disk, the placeholder values are replaced with real ones, and the updated files are added to a new directory in /packages. To modify the template package:
- If you need to add or modify any files or folders, just go ahead and make your changes in
/scripts/create-package/package-template. The CLI will read whatever's in that directory and write it to disk. - If you need to add or modify any placeholders, make sure that your desired values are added to both the relevant file(s) and
/scripts/create-package/constants.ts. Then, update the implementation of the CLI accordingly. - As with placeholders, updating the monorepo files that the CLI interacts with begins by updating
/scripts/create-package/constants.ts.