This is a template repository for typescript projects. It includes some initial typescript config and tooling to make our lives easier
NOTE: This repo uses yarn
instead of npm
for dependencies
Things included in the repo:
- Typescript (duh)
- Absolute imports (allows you to
import { foo } from ~/bar;
instead ofimport { foo } from ../../../../bar;
. The default character is~
but it can be changed intsconfig.json
) - Eslint to enforce code style rules (extending standard JS with enforced semicolons and typescript-eslint)
- Prettier to format code on save
- Semantic release for automatic versioning
- Commitizen
- Husky to enforce conventional commits and format the code using prettier before committing
- Github actions for CI (runs linter, tests, build and semantic-release)
yarn build:ts
compiles typescript files into javascript and type declarations. Outputs todist/
directoryyarn build:docs
builds a documentation page from TSDoc comments in the code. Outputs todocs/
directoryyarn test
runs tests and outputs the coverage reportyarn commit
runs the commit formatting tool (should replace normal commits)yarn semantic-release
runs semantic release to calculate version numbers based on the nature of changes since the last version (used in CI pipelines)yarn lint
runs the linter on all .ts(x) and .js(x) files and outputs all errorsyarn format
runs prettier on all .ts(x) and .js(x) files and formats them according to the project standards
- All tools are configured via their respective config files instead of adding the config in
package.json
. There is also some vscode project config in.vscode/settings.json
- eslint:
.eslintrc
- lint-staged:
.lintstagedrc
- prettier:
.prettierrc
- commitlint:
commitlint.config.js
- husky:
.husky
- jest:
jest.config.js
- semantic-release:
release.config.js
- typedoc:
typedoc.json
- github actions:
.github/main.yml
- eslint:
- The CI config assumes a
master
branch for stable releases and abeta
branch for beta releases. Every time something gets pushed to either of those branches (or any time a pull request is opened to any branch), github actions will run. Semantic-release config makes it so that actual releases are only made on pushes tomaster
orbeta
- The CI config also adds an extra couple of steps to flatten the file structure that actually gets published. This means that your published package will have the built files at the root level instead of inside a
dist
folder. Those steps are:- copy
package.json
into thedist
folder after building cd
into thedist
folder- install deps into the
dist
folder - run
semantic-release
from there
- copy
- In order for automated NPM releases to actually work, you need to add an NPM auth token as a secret in your repo. To do that, go to your repo's
settings -> secrets -> add a new secret
inputNPM_TOKEN
as the secret name and the token you generated on your NPM account in the text area - If you don't need automated NPM releases, you might want to uninstall
semantic-release
and tweak the github actions yaml file to skip the release step