https://github.com/chore-dev/composer
Single command project setup! This package automates essential tools for code style, version control, releases, and Docker.
https://github.com/chore-dev/composer
cli commitlint docker editorconfig eslint git husky lint-staged prettier release-it typescript
Last synced: 5 months ago
JSON representation
Single command project setup! This package automates essential tools for code style, version control, releases, and Docker.
- Host: GitHub
- URL: https://github.com/chore-dev/composer
- Owner: chore-dev
- License: apache-2.0
- Created: 2024-04-29T09:22:19.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-12-20T06:20:49.000Z (over 1 year ago)
- Last Synced: 2025-10-29T17:09:55.929Z (8 months ago)
- Topics: cli, commitlint, docker, editorconfig, eslint, git, husky, lint-staged, prettier, release-it, typescript
- Language: TypeScript
- Size: 223 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# composer
Single command project setup! This package automates essential tools for code style, version
control, releases, and Docker.
> **NOTE**: This package assists in setting up the following tools. You may click the links below to
> learn more about each tool.
| IDE | Development | Linting & Prettify | Version control | Deployment |
| ----------------------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------ |
| [EditorConfig](https://editorconfig.org/) | [TypeScript](https://www.typescriptlang.org/docs/) | [ESLint](https://eslint.org/docs/latest/use/getting-started)@8.0.0 | [commitlint](https://commitlint.js.org/) | [Docker](https://docs.docker.com/) |
| | | [lint-staged](https://github.com/lint-staged/lint-staged) | [Git](https://git-scm.com/) | [Release It](https://github.com/release-it/release-it) |
| | | [Prettier](https://prettier.io/docs/en/) | [husky](https://typicode.github.io/husky/) | |
> **NOTE**: Currently fixed ESLint version at latest v8.0.0 due to the following reasons:
>
> - ESLint v9 contains breaking API changes
> - The eslint-plugin-react plugin is not compatible with ESLint v9
## Table of Contents
- [Prerequisite](#prerequisite)
- [Installation](#installation)
- [Usage](#usage)
- [Options](#options)
- [Preset file](#preset-file)
- [Outputs](#outputs)
- [Docker](#docker)
- [EditorConfig](#editorconfig)
- [Git](#git)
- [Husky](#husky)
- [Prettier](#prettier)
- [release-it](#release-it)
- [commitlint](#commitlint)
- [ESLint](#eslint)
- [lint-staged](#lint-staged)
- [TypeScript](#typescript)
## Prerequisite
In order to use this package, you project must meet the following requirements:
- Contains a `package.json` file
```bash
# NPM
$ npm init
# PNPM
$ pnpm init
# Yarn
$ yarn init
```
- The directory is a `git` repository (In order to set up
[husky](https://typicode.github.io/husky/), [commitlint](https://commitlint.js.org/),
[lint-staged](https://github.com/lint-staged/lint-staged), and
[Release It](https://github.com/release-it/release-it))
```bash
$ git init
```
## Installation
Install the package as a dev dependency:
```shell
# NPM
$ npm install -D @chore-dev/composer
# PNPM
$ pnpm add -D @chore-dev/composer
# Yarn
$ yarn add -D @chore-dev/composer
```
## Usage
1. Add the following script to your `package.json` file
> You may skip this step if you are using PNPM or Yarn
```json
{
...
"scripts": {
// ...existing scripts
"composer": "composer"
},
...
}
```
2. Run the following command to start the Composer:
```shell
# NPM
$ npm run composer []
# PNPM
$ pnpm composer []
or # If you have added the script to your `package.json` file
$ pnpm run composer []
# Yarn
$ yarn composer []
or # If you have added the script to your `package.json` file
$ yarn run composer []
```
## Options
| Option | Alias | Description | Example |
| ----------------------- | ----------------- | ------------------------------------------------- | ------------------------ |
| `--dry-run` | `-D` | Run the command without making any changes | |
| `--no-backup` | | Skip creating backup files while running composer | |
| `--preset path::string` | `-P path::string` | Use a preset file and skip all questions | `--preset ./preset.json` |
### Preset file
The preset file is a JSON file that contains the configuration for the Composer. The following is
the structure of the preset file:
```typescript
interface Preset {
// Project environment
env: Record<'isBrowser' | 'isNode', boolean>;
framework: 'react' | 'vue' | 'none';
packageManager: 'npm' | 'pnpm' | 'yarn';
styleSheet: 'css' | 'scss' | 'none';
withSyntaxExtension: boolean;
// Tools
commitLint: Record<'createConfig' | 'install' | 'integrate', boolean> | false;
docker: Record<'addIgnores', boolean> | false;
editorConfig: Record<'createConfig', boolean>;
eslint: Record<'addIgnores' | 'createConfig' | 'insertScripts' | 'install', boolean> | false;
git: Record<'addIgnores', boolean> | false;
husky: Record<'insertScripts' | 'install', boolean> | false;
lintStaged: Record<'createConfig' | 'install' | 'integrate', boolean> | false;
prettier: Record<'addIgnores' | 'createConfig' | 'insertScripts' | 'install', boolean> | false;
releaseIt: Record<'createConfig' | 'insertScripts' | 'install', boolean> | false;
typescript: Record<'createConfig' | 'install', boolean> | false;
}
```
You may also copy the preset file from the Composer by running the following command:
```shell
# NPM
$ npm run composer --dry-run
# PNPM
$ pnpm composer --dry-run
or # If you have added the script to your `package.json` file
$ pnpm run composer --dry-run
# Yarn
$ yarn composer --dry-run
or # If you have added the script to your `package.json` file
$ yarn run composer --dry-run
```
## Outputs
Composer may generate the following files according to the tools you have selected:
> Click the items below to learn more about customizing them
### commitlint
- [commitlint.config.js](https://github.com/conventional-changelog/commitlint?tab=readme-ov-file#config)
### Docker
- [.dockerignore](https://docs.docker.com/build/building/context/#dockerignore-files)
### EditorConfig
- [.editorconfig](https://editorconfig.org/)
### ESLint
- [eslint.config.js](https://eslint.org/docs/latest/use/configure/configuration-files)
### Git
- [.gitignore](https://git-scm.com/docs/gitignore)
### Husky
- [.husky](https://typicode.github.io/husky/how-to.html) (Directory)
- [.husky/commit-msg](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
- [.husky/pre-commit](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
### lint-staged
- [lint-staged.config.js](https://github.com/lint-staged/lint-staged?tab=readme-ov-file#configuration)
### Prettier
- [.prettier.config.js](https://prettier.io/docs/en/option-philosophy)
- [.prettierignore](https://prettier.io/docs/en/ignore)
### release-it
- [.release-it.json](https://github.com/release-it/release-it/blob/main/docs/configuration.md)
### TypeScript
- [tsconfig.json](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html)
[^ Back to top](#composer)