Documentation is currently for moon v2 and latest proto. Documentation for moon v1 has been frozen and can be found here.
Packemon example
In this guide, you'll learn how to integrate Packemon into moon. Packemon is a tool for properly building npm packages for distribution, it does this by providing the following functionality:
- Compiles source code to popular formats: CJS, MJS, ESM, UMD, etc.
- Validates the
package.jsonfor incorrect fields or values. - Generates
exportsmappings forpackage.jsonbased on the define configuration. - And many more optimizations and features!
Begin by installing packemon in your root. We suggest using the same version across the entire
repository.
- Yarn
- Yarn (classic)
- npm
- pnpm
- Bun
yarn add --dev packemon
yarn add --dev packemon
# If using workspaces
yarn add --dev -W packemon
npm install --save-dev packemon
pnpm add --save-dev packemon
# If using workspaces
pnpm add --save-dev -w packemon
bun install --dev packemon
Setup
Since Packemon is per-project, the associated moon tasks should be defined in each project's
moon.yml file.
We suggest inheriting Packemon tasks from the official moon configuration preset.
# Inherit tasks from the `packemon` preset
# https://github.com/moonrepo/moon-configs
tags: ['packemon']
# Set the output formats
tasks:
build:
outputs:
- 'cjs'
TypeScript integration
Packemon has built-in support for TypeScript, but to not conflict with a
typecheck task, a separate tsconfig.json file is required, which is named
tsconfig.<format>.json.
This config is necessary to only compile source files, and to not include unwanted files in the declaration output directory.
{
"extends": "../../tsconfig.options.json",
"compilerOptions": {
"outDir": "esm",
"rootDir": "src"
},
"include": ["src/**/*"],
"references": []
}
Build targets
To configure the target platform(s) and format(s), you must define a
packemon block in the project's package.json. The chosen
formats must also be listed as outputs in the task.
{
"name": "package",
// ...
"packemon": {
"format": "esm",
"platform": "browser"
}
}