Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/boneskull/sync-monorepo-packages
Synchronizes one or more fields between package.json files in a monorepo
https://github.com/boneskull/sync-monorepo-packages
copy lerna manifest metadata monorepo monorepo-packages npm package-json package-management packages sync synchronize workflow
Last synced: 8 days ago
JSON representation
Synchronizes one or more fields between package.json files in a monorepo
- Host: GitHub
- URL: https://github.com/boneskull/sync-monorepo-packages
- Owner: boneskull
- License: apache-2.0
- Created: 2019-10-21T21:40:51.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2024-04-30T08:46:28.000Z (6 months ago)
- Last Synced: 2024-05-02T00:11:33.822Z (6 months ago)
- Topics: copy, lerna, manifest, metadata, monorepo, monorepo-packages, npm, package-json, package-management, packages, sync, synchronize, workflow
- Language: JavaScript
- Homepage:
- Size: 1.07 MB
- Stars: 12
- Watchers: 2
- Forks: 0
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# sync-monorepo-packages
> Synchronizes `package.json` fields and arbitrary files in a monorepo
## Features
- Auto-discovery of packages via `package.json` workspaces and/or `lerna.json`
- Optional manual control of destination packages
- Helpful defaults
- Detailed "dry run" mode
- Summary of operations
- Sync arbitrary files (e.g. `README.md`)## Install
**Requires Node.js `^14.17.0 || ^16.13.0 || >=18.0.0`**
```shell
npm install sync-monorepo-packages --save-dev
```_or_
```shell
$ npx sync-monorepo-packages --help
```## Usage
Here, I have pasted the output of `--help` because I am lazy:
```plain
sync-monorepo-packages [file..]Synchronize files and metadata across packages in a monorepo
Positionals:
file One or more source files to sync [string]Options:
--help Show help [boolean]
--version Show version number [boolean]
-D, --dry-run Do not sync; print what would have changed (implies
--verbose) [boolean]
-f, --field, --fields Fields in source package.json to sync [array] [default:
["keywords","author","repository","license","engines","publishConfig"]]
--force Overwrite destination file(s) [boolean]
-p, --packages Dirs/globs containing destination packages
[array] [default: (use workspaces and/or lerna.json)]
--package-json Sync package.json [boolean] [default: true]
-s, --source Path to source package.json
[string] [default: (closest package.json)]
-v, --verbose Print change details [boolean]
--summary Print summary [boolean] [default: true]
-l, --lerna Path to lerna.json, if any
[string] [default: (lerna.json in current dir)]Examples:
sync-monorepo-packages --field keywords Sync "keywords" and "author" from
--field author -s ./foo/package.json ./foo/package.json to packages found
in lerna.json
sync-monorepo-packages --packages ./foo Using default fields, show what
--dry-run --no-summary would have synced from package.json
in current dir to packages in ./foo;
hide summary
sync-monorepo-packages --no-package-json Sync ./README.md to each package
./README.md found in lerna.json. Do not sync
anything in package.jsonFound a bug? Report it at https://github.com/boneskull/sync-monorepo-packages
```## Notes
- If there are other fields which would make sense to copy as a default, please suggest!
- Use at your own risk! `--dry-run` is your friend
- When copying files, directories may be created relative to the dirpath of `lerna.json` or `package.json`. For example, if you want to sync `foo/bar.md` to each package, `packages/*/foo/bar.md` will be the result. This may not work properly with explicitly-specified package directories! Use from project root to be sure.
- There is an API that you can use. Go for it!## License
Copyright © 2019 Christopher Hiller. Licensed Apache-2.0