Only publish necessary package.json properties.
Support this project by ⭐️ starring and sharing it. Follow me to see what other cool projects I'm working on! ❤️
Given a package.json with dev configs, scripts, and devDependencies:
{
"name": "my-package",
"version": "1.0.0",
"description": "A useful package",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "pkgroll",
"lint": "eslint .",
"test": "vitest",
"prepack": "clean-pkg-json"
},
"dependencies": {
"lodash": "^4.0.0"
},
"devDependencies": {
"pkgroll": "^2.0.0",
"vitest": "^1.0.0",
"clean-pkg-json": "^1.0.0"
},
"eslintConfig": {
"extends": [
"@pvtnbr"
]
},
"lint-staged": {
"*.ts": "eslint --fix"
},
"simple-git-hooks": {
"pre-commit": "npx lint-staged"
}
}Running clean-pkg-json produces:
{
"name": "my-package",
"version": "1.0.0",
"description": "A useful package",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist"
],
"dependencies": {
"lodash": "^4.0.0"
}
}Uses an allowlist to preserve only properties relevant to package consumers, everything else is removed.
For scripts, only install hooks (preinstall, install, postinstall, dependencies) are preserved. All other scripts are removed.
For exports and imports, entries referencing files not included in the published package are pruned. This prevents consumers from resolving to non-existent source files. Conditional entries are partially pruned — only unpublished branches are removed. Pass --published-only=false to disable this behavior.
npm install -D clean-pkg-jsonAdd clean-pkg-json to the prepack script, which runs before npm publish and npm pack:
// package.json
{
"scripts": {
"prepack": "clean-pkg-json",
},
}| Flag | Description |
|---|---|
-k, --keep <property name> |
Property names to keep. Accepts multiple flags or a comma-delimited list. |
-r, --remove <property name> |
Property names to remove. Accepts multiple flags or a comma-delimited list. |
-v, --verbose |
Verbose logs. |
-d, --dry |
Dry run — prints the result instead of writing to disk. |
--published-only=false |
Disable pruning of unpublished paths in exports and imports. |
-h, --help |
Show help |
--version |
Show version |
View full list
nameversionprivatepublishConfigscripts.preinstallscripts.installscripts.postinstallscripts.dependenciesfilesbinbrowsermainmandependenciespeerDependenciespeerDependenciesMetabundledDependenciesoptionalDependenciesenginesoscpudescriptionkeywordsauthormaintainerscontributorslicensehomepagerepositorybugsfunding
typeexportsimports
sponsorpublisherdisplayNamecategoriesgalleryBannerpreviewcontributesactivationEventsbadgesmarkdownqnaextensionPackextensionDependenciesextensionKindicon
fesm2022fesm2020fesm2015esm2020es2020
typestypingstypesVersions
This package ships with agent skills for AI coding assistants. Set up skills-npm to use them.