GitXplorerGitXplorer
b

sync-monorepo-packages

public
12 stars
0 forks
14 issues

Commits

List of commits on branch main.
Unverified
7032e56ee22bc3d023ba2b7dd6cec69aa44edcd7

chore(deps): update actions/setup-node digest to 1a4442c

rrenovate[bot] committed a year ago
Unverified
f28c03cf7d09d4443542a88f221b41cda77a4d08

chore(deps): update dependency eslint-plugin-import to v2.29.0

rrenovate[bot] committed a year ago
Unverified
3f53c926902f6715aaa3d9af667508dc3d67377a

chore(deps): update dependency eslint to v8.52.0

rrenovate[bot] committed a year ago
Unverified
7ffdc18c0ac72e0f1417d9506a0003baeb1738b1

chore(deps): update commitlint monorepo to v17.8.1

rrenovate[bot] committed a year ago
Unverified
54a2d7f148023947da986edbae847b4bc6d62c52

chore(deps): update google-github-actions/release-please-action digest to 4c5670f

rrenovate[bot] committed a year ago
Unverified
54c75be40cf0cb9234896e1fec68e9bb2ef42f5a

chore(deps): update definitelytyped

rrenovate[bot] committed a year ago

README

The README file for this repository.

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

npm install sync-monorepo-packages --save-dev

or

$ npx sync-monorepo-packages --help

Usage

Here, I have pasted the output of --help because I am lazy:

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.json

Found 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