or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cli-commands.mdconfiguration.mdcore-operations.mdfile-processing.mdindex.mdutilities.md
tile.json

tessl/npm-clean-publish

Clean your package before publish by removing development-specific files and configuration

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/clean-publish@5.2.x

To install, run

npx @tessl/cli install tessl/npm-clean-publish@5.2.0

index.mddocs/

Clean Publish

Clean Publish is a command-line tool and Node.js package that automates the process of cleaning development-specific files and configuration from npm packages before publishing. It copies project files to a temporary directory, removes development dependencies, configuration files, and other non-essential files, then publishes the cleaned package.

Package Information

  • Package Name: clean-publish
  • Package Type: npm
  • Language: JavaScript (ESM)
  • Installation: npm install --save-dev clean-publish

Core Imports

For programmatic usage:

import {
  cleanComments,
  cleanDocs,
  clearPackageJSON,
  copyFiles,
  createFilesFilter,
  createIgnoreMatcher,
  createTempDirectory,
  getReadmeUrlFromRepository,
  publish,
  readPackageJSON,
  removeTempDirectory,
  runScript,
  writePackageJSON
} from 'clean-publish/core.js';

For configuration:

import { getConfig } from 'clean-publish/get-config.js';

For utilities:

import {
  copy,
  deleteProperty,
  filterObjectByKey,
  isObject,
  parseListArg,
  pathToKeys,
  readJSON,
  readJSONFromStdin,
  remove,
  writeJSON
} from 'clean-publish/utils.js';

Basic Usage

CLI Usage

Add to your package.json scripts:

{
  "scripts": {
    "publish": "clean-publish"
  }
}

Run with options:

npx clean-publish --files "*.test.js,coverage/" --fields "devDependencies,scripts.test"

Programmatic Usage

import {
  createTempDirectory,
  createFilesFilter,
  copyFiles,
  readPackageJSON,
  clearPackageJSON,
  writePackageJSON,
  publish,
  removeTempDirectory
} from 'clean-publish/core.js';

async function cleanAndPublish() {
  // Create temporary directory
  const tempDir = await createTempDirectory();
  
  // Filter and copy files
  const filter = createFilesFilter(['*.test.js', 'coverage/']);
  await copyFiles(tempDir, filter);
  
  // Clean package.json
  const packageJson = await readPackageJSON();
  const cleanedPackageJson = clearPackageJSON(packageJson, ['devDependencies']);
  await writePackageJSON(tempDir, cleanedPackageJson);
  
  // Publish
  await publish(tempDir, { packageManager: 'npm' });
  
  // Clean up
  await removeTempDirectory(tempDir);
}

Architecture

Clean Publish is built around several key components:

  • CLI Interface: Two executable commands (clean-publish, clear-package-json) with comprehensive option parsing
  • Core Engine: File operations, package.json cleaning, and publishing workflow
  • Configuration System: Multi-source configuration loading with validation
  • Filtering System: Pattern-based file and field filtering with RegExp and glob support
  • Package Manager Integration: Support for npm, pnpm, and yarn with custom options

Capabilities

CLI Commands

Two main CLI commands for different use cases: full package cleaning and publishing workflow, and standalone package.json cleaning utility.

// clean-publish binary
// Usage: npx clean-publish [options]

// clear-package-json binary  
// Usage: npx clear-package-json <input> [options]

CLI Commands

Core Package Operations

Core functionality for cleaning packages, managing temporary directories, and handling the publish workflow.

function createTempDirectory(name?: string): Promise<string>;
function removeTempDirectory(directoryName: string): Promise<void>;
function copyFiles(tempDir: string, filter: Function): Promise<void>;
function readPackageJSON(): Promise<object>;
function writePackageJSON(directoryName: string, packageJSON: object): Promise<void>;
function clearPackageJSON(packageJson: object, inputIgnoreFields?: string[]): object;
function publish(cwd: string, options: PublishOptions): Promise<{code: number, signal: string}>;
function runScript(script: string, ...args: string[]): Promise<boolean>;

Core Operations

File and Content Processing

Advanced file filtering, README cleaning, and JavaScript comment removal capabilities.

function createFilesFilter(ignoreFiles?: Array<string | RegExp>): Function;
function createIgnoreMatcher(ignorePattern: string | RegExp): Function;
function cleanDocs(drectoryName: string, repository?: string | object, homepage?: string): Promise<void>;
function cleanComments(drectoryName: string): Promise<void>;
function getReadmeUrlFromRepository(repository: string | object): string | null;

File Processing

Configuration Management

Flexible configuration loading from package.json, dedicated config files, and CLI arguments with comprehensive validation.

function getConfig(): Promise<Config>;

interface Config {
  cleanDocs?: boolean;
  cleanComments?: boolean;  
  files?: Array<string | RegExp>;
  fields?: string[];
  withoutPublish?: boolean;
  packageManager?: PackageManager;
  access?: PackageAccess;
  tempDir?: string;
  packageManagerOptions?: string[];
  dryRun?: boolean;
  tag?: string;
  beforeScript?: string;
}

Configuration

Utility Functions

Low-level utilities for file operations, JSON handling, argument parsing, and object manipulation.

function copy(from: string, to: string, opts?: object): Promise<void>;
function remove(dir: string): Promise<void>;
function readJSON(file: string): Promise<object>;
function writeJSON(file: string, json: object): Promise<void>;
function readJSONFromStdin(): Promise<object>;
function parseListArg(arg: string): string[];
function isObject(object: any): boolean;
function filterObjectByKey(object: object, filterByKey?: Function, deep?: boolean): object;
function pathToKeys(path: string): string[];
function deleteProperty(object: object, keys: string[]): boolean;

Utilities

Types

type PackageAccess = 'public' | 'restricted' | string;
type PackageManager = 'npm' | 'pnpm' | 'yarn' | string;

interface PublishOptions {
  access?: PackageAccess;
  dryRun?: boolean;
  packageManager?: PackageManager;
  packageManagerOptions?: string[];
  tag?: string;
}

interface Config {
  cleanDocs?: boolean;
  cleanComments?: boolean;
  files?: Array<string | RegExp>;
  fields?: string[];
  withoutPublish?: boolean;
  packageManager?: PackageManager;
  access?: PackageAccess;
  tempDir?: string;
  packageManagerOptions?: string[];
  dryRun?: boolean;
  tag?: string;
  beforeScript?: string;
}