@ttoss/monorepo
@ttoss/monorepo is a tool to setup a monorepo with pnpm based on ttoss conventions.
Install
pnpm add -Dw @ttoss/monorepo
Commands
setup-monorepo
Setup monorepo configuration following ttoss configuration guidelines.
This command creates all necessary configuration files for ESLint, Prettier, Husky, commitlint, lint-staged, Lerna, Syncpack, and pnpm workspace in your monorepo root.
npx @ttoss/monorepo setup-monorepo [directory]
Arguments:
directory- Target directory (defaults to current directory.)
Examples:
# Setup monorepo configuration in current directory
npx @ttoss/monorepo setup-monorepo
# Setup monorepo configuration in a specific directory
npx @ttoss/monorepo setup-monorepo /path/to/monorepo
What it creates:
Configuration files:
.prettierrc.js- Prettier configurationeslint.config.mjs- ESLint configuration.commitlintrc.js- commitlint configuration.lintstagedrc.js- lint-staged configurationlerna.json- Lerna configuration for versioning and publishing.syncpackrc.js- Syncpack configuration for dependency managementpnpm-workspace.yaml- pnpm workspace configuration.gitignore- Git ignore file with common patterns.npmrc- pnpm configuration file.husky/commit-msg- Husky hook for commit message linting.husky/pre-commit- Husky hook for pre-commit linting and syncpack validation
It also:
- Installs
eslint,prettier,@ttoss/eslint-config, and@ttoss/configas dev dependencies - Installs
husky,@commitlint/cli, andlint-stagedas dev dependencies - Installs
@lerna-lite/cli,@lerna-lite/version,@lerna-lite/changed, and@lerna-lite/listas dev dependencies - Installs
syncpackas dev dependency - Adds
"prepare": "husky install"script topackage.json - Adds
"syncpack:fix": "syncpack fix-mismatches"script topackage.json - Adds
"syncpack:list": "syncpack list-mismatches"script topackage.json - Initializes Husky and creates git hooks
- Configures pre-commit hook to run both
lint-stagedandsyncpack:list
Verifying the setup:
After running the command:
- Update
pnpm-workspace.yaml"packages" field to match your monorepo structure - Update
lerna.json"packages" field to match your monorepo structure - Run
pnpm syncpack:listto check for version mismatches across packages - Try making a commit to test the hooks
- Run
pnpm lintto check your code formatting
About the tools:
- Lerna: Lerna helps manage versioning and publishing of packages in a monorepo. The setup uses lerna-lite, a lighter alternative to Lerna.
- Syncpack: Syncpack ensures consistent versions of dependencies across all packages in your monorepo.
- pnpm workspace: Defines which directories contain packages in your pnpm monorepo.
setup-tests
Setup test structure following ttoss testing guidelines.
This command creates the recommended directory structure for unit and e2e tests, including all necessary configuration files.
npx @ttoss/monorepo setup-tests [directory] [options]
Arguments:
directory- Target directory (defaults to current directory.)
Options:
--e2e- Include e2e test setup (default: false)
Examples:
# Setup tests in current directory (unit tests only)
npx @ttoss/monorepo setup-tests
# Setup tests with e2e in current directory
npx @ttoss/monorepo setup-tests --e2e
# Setup tests in a specific package
npx @ttoss/monorepo setup-tests packages/my-package
# Setup tests with e2e in a specific package
npx @ttoss/monorepo setup-tests packages/my-package --e2e
What it creates:
Without --e2e:
tests/- Root tests directorytests/unit/tests/- Unit tests directorytests/unit/tests/setup.test.ts- Sample test to verify setup worksjest.config.ts- Root Jest configuration (with 50% coverage threshold)tests/unit/jest.config.ts- Unit tests Jest configurationtests/unit/babel.config.cjs- Unit tests Babel configurationtests/tsconfig.json- Tests TypeScript configuration
With --e2e:
- All of the above, plus:
tests/e2e/tests/- E2E tests directorytests/e2e/tests/setup.test.ts- Sample e2e test to verify setup workstests/e2e/jest.config.ts- E2E tests Jest configurationtests/e2e/babel.config.cjs- E2E tests Babel configuration
It also:
- Installs
jestand@ttoss/configas dev dependencies - Adds test scripts to
package.json:"test": "jest --projects tests/unit"- Run unit tests"e2e": "jest --projects tests/e2e"- Run e2e tests
Verifying the setup:
After running the command, verify everything works:
pnpm test
You should see the sample tests pass. Once you start writing your own tests, you can delete the setup.test.ts files.