GAZAR

Principal Engineer | Mentor

Publishing Your TypeScript Package to npm: A Step-by-Step Guide

Publishing Your TypeScript Package to npm: A Step-by-Step Guide

TypeScript has become a cornerstone of modern JavaScript development, offering enhanced type safety and maintainability. Publishing TypeScript packages to npm allows developers to share their code with the wider community. In this technical article, we'll walk through the process of publishing a TypeScript package to npm, covering everything from project setup to publishing, empowering developers to contribute their TypeScript creations to the ecosystem.

  • Step 1: Initialize Your npm Package:

Use npm init to initialize a new npm package. Follow the prompts to provide details such as package name, version, description, etc.

  • Step 2: Set Up Version Control:

Initialize a Git repository with git init and set your remote URL to your preferred Git hosting service (e.g., GitHub, GitLab).

  • Step 3: Configure package.json:

Ensure your package.json has the following fields:

  "type": "module",
  "main": "./dist/index.js",
  "module": "./dist/index.mjs",
  "types": "./dist/index.d.ts",
  "files": [
      "dist"
  ]
  • Step 4: Install tsup using npm install tsup --save-dev. and create a tsup.config.ts file:
import { defineConfig } from "tsup";
export default defineConfig({
  entry: ["src/index.ts"],
  format: ["cjs", "esm"], // Build for commonJS and ES modules
  dts: true, // Generate declaration file (.d.ts)
  splitting: false,
  sourcemap: true,
  clean: true,
});
  • Step 5: Define npm Scripts:

Add scripts to your package.json for building, testing, linting, etc.:

"scripts": {
    "prepublishOnly": "npm run build",
    "start": "npx tsx ./main.ts",
    "build": "tsup",
    "lint": "eslint src",
    "test": "jest",
    "test:watch": "npm test -- --watch"
}
  • Step 6: Configure .npmrc:

Create a .npmrc file with your registry URL:

@NAMESPACE:registry=https://npm.pkg.github.com
  • Step 7: Update .gitignore:

Ensure that dist and node_modules directories are excluded from version control by adding them to your .gitignore file.

  • Step 8: Write README.md:

Craft a detailed README file with installation instructions, usage examples, and contribution guidelines to onboard users and contributors effectively.

  • Step 9: Push to Your Git Repository:

Add, commit, and push your changes to your Git repository.

  • Step 10: Login to npm:

Use npm login to authenticate with your npm account credentials.

  • Step 11: Publish Your Package:

Run npm publish in the root directory of your package to publish it to the npm registry.

  • Step 12: Ensure Export in index.js:

Make sure your project has an index.js file with appropriate exports for consumers to use.

  • Step 13: Test Your Package:

Create a main.ts file in your project, install your own package (npm install <package-name>), and ensure that everything works as expected.

Example: https://www.npmjs.com/package/xml-sitemap-generator?activeTab=readme

Conclusion

ublishing a TypeScript package to npm is a rewarding endeavor that empowers developers to contribute their creations to the open-source community. By following the steps outlined in this guide, you can confidently prepare, publish, and share your package with others. From setting up your project and configuring build tools to writing comprehensive documentation and ensuring version control, each step plays a crucial role in ensuring the success and adoption of your package.

As you embark on your journey to publish your TypeScript package, remember to prioritize quality, maintainability, and collaboration. Regularly engage with users, respond to feedback, and iteratively improve your package to meet the evolving needs of the community. By fostering an inclusive and supportive environment, you can cultivate a thriving ecosystem of TypeScript packages that enrich the development experience for all.

With your package published on npm, you join a vibrant community of developers contributing to the advancement of technology and innovation. Embrace the opportunity to share your knowledge, learn from others, and make a positive impact on the world of software development. Together, we can build a future where high-quality, reusable code is accessible to all, driving progress and innovation in the digital age.