You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:45:02