Project template for Node libraries. Features:
- Modules: Hybrid ESM/CJS
- Types: TypeScript
- Tests: Vitest
- Linting: ESLint
- Formatting: dprint
- Publishing: Dripip
- Continuous Integration: GitHub Actions
- Dependency Management: Renovate
- Community: Issue Templates
Make sure you have corepack
enabled:
$ corepack enable
The following will get you a ready to go new repository on GitHub based on this one.
-
Run:
gh repo create foobar --template jasonkuhrt/template-typescript-lib --clone --public && \ cd foobar && \ pnpm install && \ pnpm bootstrap
-
Setup a repo secret called
NPM_TOKEN
containing an npm token for CI package publishing.
The following will get you a ready to go new repository on GitHub based on this one.
-
Run:
gh repo clone jasonkuhrt/template-typescript-lib <directory> && \ cd <directory> && \ pnpm install && \ pnpm bootstrap
-
Setup a repo secret called
NPM_TOKEN
containing an npm token for CI package publishing.
- TypeScript
- ESLint
- Vitest
- Dripip
- Simple succinct friendly low-barrier issue templates
- dprint
- npm scripts for development lifecycle
- CI with GitHub Actions
- Renovate
- PnPM
- CJS+ESM Hybrid package build
- VSCode Settings
- Readme Table of Contents
- Useful TypeScript Libraries
TypeScript for Type Safety & Productivity
-
Optimal settings for type safety via
@tsconfig/node18
and@tsconfig/strictest
-
.tsbuildinfo
cache setup, output discretely intonode_modules/.cache
-
Base
tsconfig.json
shared acrosstests
andsrc
. -
Optimal output setup for your users
-
declaration
so your users can power their intellisense with your packages typings. -
declarationMap
enabled to make your published source code be navigated to when your users use "go to definition". -
package.json
typeVersions
used to emit only one set of declaration files shared by both CJS and ESM builds. -
sourceMap
enabled to allow your users' tools to base off the source for e.g. stack traces instead of the less informative derived built JS. - Publish
src
with build files so that jump-to-definition tools work optimally for users.
-
-
tsx
for running TypeScript scripts/modules.
ESLint For Linting
- TypeScript integration
- TS type-checker powered eslint checks enabled
- Setup as a CI check for PRs
- Always display as warning to keep IDE error feedback for TypeScript (CI enforces warnings).
- Auto-fixable import sorting
Vitest for Testing
Just Works :)
Dripip for Releasing
- Emojis
✈️ - Feature / bug / docs / something-else
- Config to display discussions link right in new issue type listing UI
dprint for code formatting
- Setup as a CI check for PRs
- VSCode extension in recommended extensions list so that when collaborators open the project they'll get prompted to install it if they haven't already.
- npm script
-
clean
to remove cache and build files -
build
that runsclean
beforehand -
prepublishOnly
that runsbuild
beforehand -
format
to rundprint
over whole codebase -
lint
to runeslint
over whole codebase
- Separate trunk and pull-request (PR) workflows.
- Dependency install cache enabled.
- On PR:
- Formatting Check
- Lint Check
- Type Check
- Tests across matrix of mac/linux/windows for Node 14/16
- On trunk:
- Tests across matrix of mac/linux/windows for Node 14/16
- Automated canary release
Renovate configuration
- JSON Schema setup for optimal intellisense
- Group all non-major devDependency updates into single PR (which "chore" conventional commit type)
- Group all major devDependency updates into single PR (with "chore" conventional commit type)
- Group all non-major dependency updates into single PR (with "deps" conventional commit type)
- Each major dependency update in own PR (with "deps" conventional commit type)
PnPM for package management
- Using Corepack. This means the PnPM specified in
package.json
will be used. And note this is a PnPM binary shipped with Node now. In a future version of Node you will not need to even opt-in into Corepack. Make sure you've donecorepack enable
at least once.
An actually working hybrid CJS/ESM build.
- Optimize project search by recursively (ready for monorepo) ignoring
build/*
, snapshots, lock files, and more. - On-Save actions for optimal editing experience (e.g. ESLint auto-fix to organize imports automatically)
- List of VSCode extensions that users who open the project will be prompted to install if they don't already.
- Enable
typescript.enablePromptUseWorkspaceTsdk
so that oneself and collaborators will get prompted to use the workspace version of TypeScript instead of the one in the editor.
- Using
markdown-toc
Here are some TypeScript libraries you might want to use for your new project: