Clean your package before publish by removing development-specific files and configuration
npx @tessl/cli install tessl/npm-clean-publish@5.2.0Clean 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.
npm install --save-dev clean-publishFor 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';Add to your package.json scripts:
{
"scripts": {
"publish": "clean-publish"
}
}Run with options:
npx clean-publish --files "*.test.js,coverage/" --fields "devDependencies,scripts.test"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);
}Clean Publish is built around several key components:
clean-publish, clear-package-json) with comprehensive option parsingTwo 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]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>;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;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;
}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;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;
}