Skip to content

a npm library with multiple entry points, all typed, all shipped in cjs/esm versions

Notifications You must be signed in to change notification settings

theKashey/multiple-entry-points-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

multiple-entry-points

Shipping a library? What about tree-shaking - ship it in es-modules format!

What about nodejs? ship it in csj format!

So yes - all good libraries are producing two bundles

in your package.json you might define

{
  "main": "dist/es5/index.js", // for nodejs
  "jsnext:main": "dist/es2015/index.js", // for "next" js
  "module": "dist/es2015/index.js", // for "esmodules"
  "types": "dist/es5/index.d.ts", // yeah, and types
}

But sometimes you have to create a multiple entry points, for a better tree-shaking, a better scoping, and so on. Dont forget - Tree Shaking is not working in dev mode, so - if you want to add a React bindings to your generic library - you have to create or separate package, or a separate entry point.

Here is the problem - how to ship that entry point in two bundles, and add types? Usually separate entry points are just js files, which are pointing to a right place in dist, or directories, which contains already transpiled code.

Dam it!

Solution

  • for every entry point create a directory
  • place compact package.json into the every directory, which may separate bundles _as usual.

The problem of entry points - package.json of your project might define only one, the main, entry point. Here is the solution - create more package.jsons, a one per every entry.

Problem solved. For any bundler or even browser - package.json is a STANDARD everyone could understand.

About

a npm library with multiple entry points, all typed, all shipped in cjs/esm versions

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published