Skip to content

@stephansama packages / @stephansama/multipublish

@stephansama/multipublish

Source codeDocumentationNPM Versionnpm downloads

Publish packages to multiple providers easily

Table of contents
Open Table of contents

Installation

sh
pnpm install @stephansama/multipublish

Usage

Configuration

You can configure multipublish by creating a configuration file (or object) in the root of your project. The following file formats are supported:

  • package.json
  • .multipublishrc.cjs
  • .multipublishrc.js
  • .multipublishrc.json
  • .multipublishrc.mjs
  • .multipublishrc.ts
  • .multipublishrc.yaml
  • .multipublishrc.yml
  • .multipublishrc
  • .config/.multipublishrc.json
  • .config/.multipublishrc.yaml
  • .config/.multipublishrc.yml
  • .config/.multipublishrc
  • .config/multipublishrc.cjs
  • .config/multipublishrc.js
  • .config/multipublishrc.json
  • .config/multipublishrc.mjs
  • .config/multipublishrc.ts
  • .config/multipublishrc.yaml
  • .config/multipublishrc.yml
  • .config/multipublishrc
  • multipublish.config.cjs
  • multipublish.config.js
  • multipublish.config.mjs
  • multipublish.config.ts
json
{
  "$schema": "./node_modules/@stephansama/multipublish/config/schema.json",
  "platforms": [
    ["jsr", { "experimentalGenerateJSR": true, "defaultExclude": ["!dist"] }],
    [
      "npm",
      {
        "registry": "https://npm.pkg.github.com",
        "tokenEnvironmentKey": "GITHUB_TOKEN"
      }
    ]
  ]
}

GitHub NPM Registry

If publishing to the GitHub NPM registry, you must add packages to permissions when using a GitHub token. And allow write and read permissions for workflows (located in repo settings > actions > general).

yaml
permissions:
  packages: write

JSR Configuration

When publishing to JSR, you must either have a valid jsr.json or deno.json, or allow experimentalGenerateJSR using the config option.

Changesets

If you are using jsr this with changesets, please update your version script with a preversion script that calls the multipublish CLI in order to update your existing jsr configurations.

JSR

json
{
  "scripts": {
    "preversion": "multipublish --useChangesetStatus --versionJsr",
    "version": "changeset version"
  }
}

Published packages

you can run multipublish after a changeset publish like so

yaml
- if: github.ref_name == 'main'
  name: 🦋 Create Changeset Release
  uses: changesets/action@v1
  id: changesets
  with:
    commit: "chore: Update version for release"
    title: "chore: Update version for release"
    publish: pnpm run publish
    createGithubReleases: true
- name: publish to other registries
  if: steps.changesets.outputs.published == 'true'
  run: |
    echo "${{ steps.changesets.outputs.publishedPackages }}" | multipublish

Zod Schema

Config

Object containing the following properties:

PropertyTypeDefault
platforms (*)Platforms
tmpDirectorystring'.release'
useChangesetsbooleantrue

(*) Required.

JsrPlatformOptions

Object containing the following properties:

PropertyTypeDefault
allowSlowTypesbooleantrue
defaultExcludeArray<string>
defaultIncludeArray<string>
experimentalGenerateJSRbooleanfalse
experimentalUpdateCatalogsbooleanfalse

All properties are optional.

NpmPlatformOptions

Object containing the following properties:

PropertyTypeDefault
registrystring'https://registry.npmjs.org/'
strategy'.npmrc' | 'package.json''.npmrc'
tokenEnvironmentKeystring'NODE_AUTH_TOKEN'

All properties are optional.

Platforms

*Array of 'jsr' | 'npm' *or* Tuple:

  1. 'jsr'
  2. JsrPlatformOptions
or Tuple:
  1. 'npm'
  2. NpmPlatformOptions
items.*

Modules

ModuleDescription

args

catalog

config

detect

index

jsr

publish

release

schema

util

Released under MIT license