执行npm/pnpm pack时如何移除package.json中的开发相关配置项
针对npm/pnpm环境的实现方案
方案1:通用生命周期钩子方案(npm/pnpm均适用)
该方案无需额外依赖,通过npm/pnpm内置的prepack、postpack生命周期钩子自动完成package.json的裁剪和恢复:
- 根目录新建裁剪脚本
trim-package.js:
const fs = require('fs') const originalPkg = require('./package.json') // 仅保留需要的字段 const trimmedPkg = { name: originalPkg.name, version: originalPkg.version, main: originalPkg.main, files: originalPkg.files, scripts: { run: originalPkg.scripts.run }, dependencies: originalPkg.dependencies } // 备份原文件 fs.copyFileSync('./package.json', './package.json.bak') // 写入裁剪后的配置 fs.writeFileSync('./package.json', JSON.stringify(trimmedPkg, null, 2))
- 根目录新建恢复脚本
restore-package.js:
const fs = require('fs') // 恢复原package.json并删除备份 fs.copyFileSync('./package.json.bak', './package.json') fs.unlinkSync('./package.json.bak')
- 在原package.json的scripts中添加钩子配置:
{ "scripts": { "prepack": "node trim-package.js", "postpack": "node restore-package.js" } }
配置完成后,每次执行npm pack或pnpm pack都会自动完成裁剪、打包、恢复的全流程,无需手动操作。
方案2:pnpm原生配置方案(仅pnpm适用)
pnpm原生支持通过publishConfig字段配置打包/发布时的覆盖规则,无需额外脚本,在原package.json中添加如下配置即可:
{ "publishConfig": { "scripts": { "run": "node dist/index.js" }, "delete": ["devDependencies"] } }
pnpm执行pack或publish操作时,会自动用publishConfig中的字段替换顶层对应配置,同时删除delete数组中指定的顶层字段。
方案3:手动指定自定义package.json
如果只是偶尔需要打包,也可以提前准备好裁剪后的配置文件(比如命名为package.prod.json),执行打包时临时替换:
# npm环境 cp package.prod.json package.json && npm pack && git checkout package.json # pnpm环境 cp package.prod.json package.json && pnpm pack && git checkout package.json
如果没有用git管理,也可以手动备份原文件后替换。
内容的提问来源于stack exchange,提问作者user3612643
相关产品推荐
相关产品推荐

