Skip to main content

packemon

Build Status npm version

Gotta pack 'em all!

Are you a library maintainer? Confused on how to build packages for consumers? Unsure of what tooling and plugins to use? What about CommonJS vs ECMAScript? TypeScript, JavaScript, or FlowType? Forget that headache and let Packemon do the heavy lifting for you. No need to fiddle with Babel or Rollup configurations!

Packemon is a "batteries included" CLI that will prepare each package for distribution by building with the proper tooling and plugins, provide sane defaults and configurations, verify package requirements, and much more! By default Packemon will generate ECMAScript modules, but can be configured to support all formats.

Features

  • Scaffold TypeScript packages, in either a monorepo or polyrepo project setup.
  • Configure packages for Node.js, Web browsers, or React Native, with multiple output formats like CommonJS and ECMAScript (default).
  • Build packages with Rollup to create self-contained and tree-shaken bundles. Provide the smallest file sizes possible!
  • Support a single index import, multiple imports, deep imports, or any kind of entry point.
  • Transform packages with Babel's preset-env and the configured platform targets. Only ship and polyfill what's truly necessary!
  • Generate and combine TypeScript declarations into a single public-only API representation.
  • Generate compact source maps for platform + format based builds.

Requirements

  • Linux, OSX, Windows
  • Node 14.15+

Documentation

https://packemon.dev

Index

Type Aliases

ApiType

ApiType: private | public

ArtifactState

ArtifactState: building | failed | passed | pending

Awaitable

Awaitable: Promise<void> | void

BrowserFormat

BrowserFormat: CommonFormat | esm | umd

CommonFormat

CommonFormat: lib

ConfigMutator

ConfigMutator<T>: (config: T) => void

Type parameters

  • T

ConfigMutatorWithBuild

ConfigMutatorWithBuild<T>: (config: T, build: BuildParams) => void

Type parameters

  • T

Environment

Environment: `${Platform}:${Support}`

Format

InfraType

InfraType: monorepo | polyrepo

InputMap

InputMap: Record<string, string>

NativeFormat

NativeFormat: CommonFormat

NodeFormat

NodeFormat: CommonFormat | cjs | mjs

PackageExportConditions

PackageExportConditions: asset | browser | default | deno | development | electron | import | module | node-addons | node | production | react-native | require | script | style | types

PackageExportPaths

PackageExportPaths: { [ K in PackageExportConditions ]?: PackageExportPaths | string }

PackageExports

PackageExports: Record<string, PackageExportPaths | string | undefined>

Platform

Platform: browser | native | node

Support

Support: current | experimental | legacy | stable

TemplateType

TemplateType: monorepo-package | monorepo | polyrepo-package | polyrepo

Variables

constASSETS

ASSETS: string[] = ...

constBROWSER_TARGETS

BROWSER_TARGETS: { [ K in Support ]: string[] | string } = ...

constDEFAULT_FORMATS

DEFAULT_FORMATS: Record<Platform, Format> = ...

constDEFAULT_INPUT

DEFAULT_INPUT: src/index.ts = 'src/index.ts'

constDEFAULT_PLATFORM

DEFAULT_PLATFORM: Platform = 'browser'

constDEFAULT_SUPPORT

DEFAULT_SUPPORT: Support = 'stable'

constEXCLUDE

EXCLUDE: string[] = ...

constEXCLUDE_RUST

EXCLUDE_RUST: string[] = ...

constEXTENSIONS

EXTENSIONS: string[] = ...

constFORMATS

FORMATS: Format[] = ...

constFORMATS_BROWSER

FORMATS_BROWSER: BrowserFormat[] = ...

constFORMATS_NATIVE

FORMATS_NATIVE: NativeFormat[] = ...

constFORMATS_NODE

FORMATS_NODE: NodeFormat[] = ...

constNATIVE_TARGETS

NATIVE_TARGETS: { [ K in Support ]: string } = ...

constNODE_SUPPORTED_VERSIONS

NODE_SUPPORTED_VERSIONS: { [ K in Support ]: string } = ...

constNPM_SUPPORTED_VERSIONS

NPM_SUPPORTED_VERSIONS: { [ K in Support ]: string[] | string } = ...

constPLATFORMS

PLATFORMS: Platform[] = ...

constSTATE_COLORS

STATE_COLORS: { [ K in ArtifactState ]?: StyleType } = ...

constSTATE_LABELS

STATE_LABELS: { [ K in ArtifactState ]: string } = ...

constSUPPORTS

SUPPORTS: Support[] = ...

constSUPPORT_PRIORITY

SUPPORT_PRIORITY: Record<Support, number> = ...

constSUPPORT_TO_ESM_SPEC

SUPPORT_TO_ESM_SPEC: { current: es2020; experimental: es2022; legacy: es5; stable: es2018 } = ...