CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-clean-publish

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

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

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;
}

docs

cli-commands.md

configuration.md

core-operations.md

file-processing.md

index.md

utilities.md

tile.json