Clean your package before publish by removing development-specific files and configuration
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Core functionality for cleaning packages, managing temporary directories, and handling the publish workflow.
Creates and manages temporary directories for the cleaning process.
/**
* Creates a temporary directory for package cleaning
* @param name - Optional directory name, generates random name if not provided
* @returns Promise resolving to directory path
* @throws Error if named directory already exists
*/
function createTempDirectory(name?: string): Promise<string>;
/**
* Removes temporary directory and all contents
* @param directoryName - Path to directory to remove
* @returns Promise that resolves when directory is removed
*/
function removeTempDirectory(directoryName: string): Promise<void>;Usage Examples:
import { createTempDirectory, removeTempDirectory } from 'clean-publish/core.js';
// Create with random name
const tempDir = await createTempDirectory();
console.log(tempDir); // "tmp123abc"
// Create with specific name
const namedDir = await createTempDirectory('my-clean-build');
// Clean up
await removeTempDirectory(tempDir);Reading, cleaning, and writing package.json files with publishConfig support.
/**
* Reads package.json from current directory
* @returns Promise resolving to parsed package.json object
*/
function readPackageJSON(): Promise<object>;
/**
* Writes package.json to specified directory
* @param directoryName - Target directory path
* @param packageJSON - Package.json object to write
* @returns Promise that resolves when file is written
*/
function writePackageJSON(directoryName: string, packageJSON: object): Promise<void>;
/**
* Cleans package.json by removing development fields and applying publishConfig
* @param packageJson - Original package.json object
* @param inputIgnoreFields - Additional fields to remove beyond defaults
* @returns Cleaned package.json object
*/
function clearPackageJSON(packageJson: object, inputIgnoreFields?: string[]): object;Usage Examples:
import { readPackageJSON, clearPackageJSON, writePackageJSON } from 'clean-publish/core.js';
// Read and clean package.json
const original = await readPackageJSON();
const cleaned = clearPackageJSON(original, ['devDependencies', 'scripts.test']);
// Write to temp directory
await writePackageJSON('/tmp/clean-build', cleaned);Copying project files with filtering support.
/**
* Copies project files to temporary directory with filtering
* @param tempDir - Target directory for copied files
* @param filter - Filter function to determine which files to copy
* @returns Promise that resolves when copying is complete
*/
function copyFiles(tempDir: string, filter: Function): Promise<void>;Usage Examples:
import { copyFiles, createFilesFilter } from 'clean-publish/core.js';
// Create filter and copy files
const filter = createFilesFilter(['*.test.js', 'coverage/']);
await copyFiles('/tmp/clean-build', filter);Publishing the cleaned package using specified package manager.
/**
* Publishes package using specified package manager
* @param cwd - Directory containing package to publish
* @param options - Publishing options
* @returns Promise resolving to process result
*/
function publish(cwd: string, options: PublishOptions): Promise<{code: number, signal: string}>;
interface PublishOptions {
/** Package access level */
access?: PackageAccess;
/** Perform dry run without actual publishing */
dryRun?: boolean;
/** Package manager to use */
packageManager?: PackageManager;
/** Additional options passed to package manager */
packageManagerOptions?: string[];
/** Tag to register package with */
tag?: string;
}Usage Examples:
import { publish } from 'clean-publish/core.js';
// Basic publish
const result = await publish('/tmp/clean-build', {
packageManager: 'npm'
});
// Publish with options
const result = await publish('/tmp/clean-build', {
packageManager: 'pnpm',
access: 'public',
tag: 'beta',
dryRun: true,
packageManagerOptions: ['--no-git-checks']
});
console.log(`Publish completed with code: ${result.code}`);Running custom scripts during the publish process.
/**
* Executes shell script with arguments
* @param script - Script command to execute
* @param args - Arguments to pass to script
* @returns Promise resolving to boolean indicating success
*/
function runScript(script: string, ...args: string[]): Promise<boolean>;Usage Examples:
import { runScript } from 'clean-publish/core.js';
// Run build script before publish
const success = await runScript('npm run build');
if (!success) {
throw new Error('Build failed');
}
// Run script with arguments
const success = await runScript('node', 'scripts/prepare.js', '--mode', 'production');The following fields are removed by default during cleaning:
devDependenciesbabel, eslintConfig, prettier, jest, etc.husky, lint-staged, commitlint, etc.resolutions, pnpmFields in publishConfig override main package.json fields during cleaning:
bin, main, exports, types, typingsmodule, browser, esnext, es2015unpkg, umd:main, typesVersionscpu, osOnly npm lifecycle scripts are preserved:
postinstall, postpack, postpublishpostversion, prepare, prepublishpublish, uninstall, versionCustom publish scripts calling clean-publish are automatically removed to prevent recursion.