Zero-knowledge minimalistic template for creating a new npm package.
📘Docs Demo: https://34j.github.io/create-minimal-package/
📦️NPM Package Demo: https://www.npmjs.com/package/create-minimal-package
-
The proof that the config is minimalistic is shown below.
-
The main reason (
☆) of the slight complexity is the need to specify the project structure (src,dist,test). -
👾Github
- 📦🚀semantic-release & Commitizen: from this article
- New Issue Templates: from browniebroke/pypackage-template
- 💨GitHub Actions + 📊Codecov: npm version of browniebroke/pypackage-template
- 🧱Renovate: inherits config:best-practices
-
⚙TypeScript:
tsconfig.json: inherits @tsconfig/strictest: 4 lines for☆, 3 lines for ES types -
✨️Formatting
⚠️ pre-commit and pre-commit.ci: from browniebroke/pypackage-template + mirrors-eslint (⏪️🐶Husky + Lint Staged for better CI support)- ESLint: inherits @antfu/eslint-config
-
📦Packageing
- pnpm (⏪️npm)
- 🛡️Trusted Publishing
-
⚠️ Testing -
📖Documentation
- 🌐GitHub Pages
- 📖TypeDoc: 2 lines for
☆P
-
❄Nix Support (Optional, only needed for Nix users)
- ❄
nix develop --ignore-environment: many lines for Playwright support (optional, can be removed if Node.js only)
- ❄
Removed Features (to achieve minimalism)
- Removed Commitizen integration and VS Code stuff (from ryansonshine/typescript-npm-package-template) because it's not maintained and complex. Commitizen can be still used (Semantic Release supports it natively).
- Removed Prettier due to @antfu/eslint-config's opinions and mirrors-prettier being archived.
uvx copier copy --trust "gh:34j/create-minimal-package" --vcs-ref main my-cool-package
🎤 What is your project name?
my-cool-package
🎤 What is your GitHub username?
34j- Run
npx setup-npm-trusted-publish my-cool-packageto reserve the package name and allow trusted publishing. - Click the "Use this template" button.
- Replace
GITHUB_USERandREPO_NAMEusingsed:
GITHUB_USER="johnsmith"
REPO_NAME="my-cool-package"
sed -i.tmp "s/\([^@]\)34j/\1$GITHUB_USER/g; s/create-minimal-package\|my-package-name/$REPO_NAME/g;" package.json src/index.ts README.md
sed -i.tmp 's/"version": "[0-9.]*"/"version": "0.0.0"/' package.json
rm *.tmp
rm src/*.tmp
rm CHANGELOG.md
rm *.jinja- Install GitHub Apps, pre-commit.ci lite and Codecov.
- Install pre-commit using
uvbyuv tool install pre-commitand install hooks bypre-commit install. - Enable Github Pages and set
SourcetoGitHub ActionsfromSettings/Pages/Build and deployment - Remove everything above
---.
Inspired by node-module-boilerplate and typescript-npm-package-template, which is great but unnecessarily complex and poorly maintained.
- Enable Token authentication for public repositories to upload coverage reports without a token.
📘Documentation: https://34j.github.io/create-minimal-package/
📦️NPM Package: https://www.npmjs.com/package/create-minimal-package
TODO: Project Description.
npm install create-minimal-packageimport { myPackage } from 'create-minimal-package'
myPackage('hello')
// => 'hello from my package'