Skip to content

codebygio/pkg-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NPM Package Template

A modern template for creating and publishing NPM packages using TypeScript, TSup, and Changesets.

Features

  • 📦 TypeScript configuration with strict settings
  • 🛠️ TSup for bundling (outputs CommonJS and ESM)
  • 🔄 Automated versioning and publishing with Changesets
  • 🚀 GitHub Actions for CI/CD
  • ✨ Type definitions included
  • 📝 Automated changelog generation

Getting Started

Using this template

  1. Click the "Use this template" button at the top of this repository
  2. Clone your new repository
  3. Install dependencies:
npm install

Development

  1. Make your changes in the src directory
  2. Build the package:
npm run build
  1. Lint your code:
npm run lint

Making Changes

When you want to make changes to the package:

  1. Create a new branch
  2. Make your changes
  3. Add a changeset:
npm run changeset
  1. Commit and push your changes
  2. Create a Pull Request

Project Structure

.
├── .changeset/
├── .github/
│   └── workflows/
│       ├── main.yaml
│       └── publish.yaml
├── src/
│   └── index.ts
├── .gitignore
├── package.json
├── tsconfig.json
└── README.md

Scripts

  • npm run build - Builds the package using TSup
  • npm run lint - Runs TypeScript type checking
  • npm run changeset - Creates a new changeset
  • npm run version - Applies changesets to create a new version
  • npm run release - Publishes the package to NPM

GitHub Actions Workflows

Main Workflow (main.yaml)

name: CI
on:
  push:
    branches:
      - "**"

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 20.x
          cache: "npm"
      
      - name: Install Dependencies
        run: npm install --frozen-lockfile
      
      - name: Lint and Build
        run: npm run lint && npm run build

Publish Workflow (publish.yaml)

name: Publish

on:
  workflow_run:
    workflows: [CI]
    branches: [main]
    types: [completed]

concurrency: ${{ github.workflow }}-${{ github.ref }}

permissions:
  contents: write
  pull-requests: write

jobs:
  publish:
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    steps:
      - uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 20.x
          cache: "npm"

      - name: Install Dependencies
        run: npm install --frozen-lockfile

      - name: Create Release Pull Request or Publish
        id: changesets
        uses: changesets/action@v1
        with:
          publish: npm run release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

Configuration Files

package.json

{
  "name": "pkg-template",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/codebygio/pkg-template.git"
  },
  "version": "0.0.1",
  "description": "A template for creating npm packages",
  "main": "dist/index.js",
  "module": "dist/index.mjs",
  "types": "dist/index.d.ts",
  "scripts": {
    "build": "tsup src/index.ts --format cjs,esm --dts",
    "release": "npm run build && changeset publish",
    "lint": "tsc"
  },
  "keywords": [
    "npm",
    "package",
    "template"
  ],
  "author": "Giovani Rodriguez",
  "license": "MIT",
  "devDependencies": {
    "@changesets/cli": "^2.27.9",
    "tsup": "^8.3.5",
    "typescript": "^5.6.3"
  }
}

tsconfig.json

{
    "compilerOptions": {
        /* Base Options: */
        "esModuleInterop": true,
        "skipLibCheck": true,
        "target": "es2022",
        "verbatimModuleSyntax": true,
        "allowJs": true,
        "resolveJsonModule": true,
        "moduleDetection": "force",
        /* Strictness */
        "strict": true,
        "noUncheckedIndexedAccess": true,
        /* If NOT transpiling with TypeScript: */
        "moduleResolution": "Bundler",
        "module": "ESNext",
        "noEmit": true,
        /* If your code runs in the DOM: */
        "lib": [
            "es2022",
            "dom",
            "dom.iterable"
        ],
    }
}

.gitignore

node_modules/
dist/
.DS_Store

Publishing

  1. Make sure you have an NPM account and are logged in:
npm login
  1. Add an NPM_TOKEN secret to your GitHub repository:

    • Generate a token on NPM's website
    • Add it to your repository's secrets as NPM_TOKEN
  2. When you're ready to publish:

    • Merge your changes to main
    • The GitHub Action will automatically create a release PR
    • Merge the release PR to publish to NPM

License

MIT

Contributing

  1. Fork the repository
  2. Create your feature branch
  3. Add a changeset describing your changes
  4. Commit your changes
  5. Push to the branch
  6. Open a Pull Request

Don't forget to customize this README with your package's specific details!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors