Sparkee is a publish tool for monorepo
,just like lerna but support pnpm
, also support singleRepo.
There are six commands in sparkee:
init
will initialize sparkee workspace.
init-cliff
will initialize git-cliff
config file.
run
will run the script of package.
info
will show package's info of workspace.
log
will only generate changelog.md
.
publish
will publish any updated packages and generate changelog automatically.
- Sparkee can publish Single package or customize multiple packages.
- Support
workspace
protocol inpackage.json
. - Use
pnpm <--filter> publish
so you can keep theworkspace
keyword ofdependencies
. - More friendly output of CLI.
- CLI commands are very very simple!
Sparkee needs a file structure like this(the same as the lerna project):
your-repo/
package.json
packages/
package-1/
src/
package.json
package-2/
src/
package.json
It will track file changes inside the packages src
folders and package.json
files.
# simple install or install it globally with -g
npm install sparkee --save-dev
# if you install globally, use it `sparkee <command>`
sparkee init
sparkee version
sparkee publish
# OR use npx in root of project
npx sparkee init
npx sparkee publish
npx sparkee version
$ sparkee init
Initialize sparkee workspace
. There will create a spark.json
, you can make sparkee manage all of packages or customized packages.
Sparkee assumes the repo has already been initialized with
git init
.
Example output on a new git repo:
Example-1. All packages:
$ sparkee init
? Do you need sparkee to manage all projects of packages folder? yes
✔ Sparkee init successful.
Example-2. Custom packages:
$ sparkee init
? Do you need sparkee to manage all projects of packages folder? No
? What packages do you want to manage? @geocld/pkg1
✔ Sparkee init successful.
Example-3. single repo:
$ sparkee init
? Please select repo type: singleRepo
✔ Sparkee init as singleRepo successful.
In singleRepo mode, spark.json
will be:
{
"singleRepo": true,
"moduleManager": "npm"
}
singleRepo
: Must be true
in single repo.
moduleManager
: Can be npm
or yarn
or pnpm
.
$ sparkee run
Run the scripts
of packages.json
:
Example:
$ sparkee run
? Please select script: (Use arrow keys)
❯ dev -> rimraf dist && tsc -w
build -> rimraf dist && tsc
$ sparkee info <--tree>
Print local information of packages.
Example:
$ sparkee info
> Current monorepo packages:
· @geocld/pkg1: v1.0.0
· @geocld/pkg2: v1.0.0
Or Print detail dependencies tree of packages:
$ sparkee info --tree
@geocld/[email protected]
╰── @geocld/[email protected]
----------
@geocld/[email protected]
$ sparkee log
If you only want to generate a changelog, you can execute the above command.
$ sparkee publish
publish
is the core of sparkee. When runing, this command does the following things:
- Find updated packages since the last release(must with
git tag
, otherwise compare with first commit). - Select what packages that you want to publish.
- Update
version
ofpackage.json
automatically. - Generate
CHANGELOG.md
automatically in selected packages. - Run
git Commit
,git tag
andgit push
automatically. - Run
pnpm publish
sparkee will never publish packages which do not exits in
spark.json
.
The workflow of sparkee
is as follows:
Sparkee will not publish unmodified packages, if you want to publish unmodified packages, use --force
:
sparkee publish --force
If yout want sparkee
just genetate changelog and create tag, publish
command run in other place(such as pipeline
), use --noPublish
or --np
:
sparkee publish --noPublish
or
sparkee publish --np
If you want to skip commit check before publish or generate changelog, you can use --noCommitCheck
or --ncm
:
sparkee publish --noCommitCheck
or
sparkee publish --ncm
If you dont want to use prompt when publish(such as in CI/CD autodeploy case), you can use --package
and --ver
to specify the name and version of package.For example:
sparkee publish --package @geocld/sparkee --ver 1.2.0
sparkee
use git-cliff internally to generate CHANGELOG.md
, If you want to use custom changelog, you can run sparkee init-cliff
to generate a cliff
config file, refer to the configuration items in detail.
Since version 1.3.0
, a JSON schema file for the spark.json
is published.
You can specify a relative path to the schema of the Sparkee npm package if Sparkee is installed in the node_modules
folder:
{
"$schema": "./node_modules/sparkee/template/schema.json",
"moduleManager": "pnpm",
"packages": [
"@example/docs",
"@example/cli",
]
}
MIT © Geocld