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

能否配置两个package.json文件分别用于项目开发与包发布?

能否实现拆分package.json并分目录发布的配置?

问题描述

我想把项目拆分为两个文件夹:

  • src:存放源代码(模块、控制器、服务类等)
  • pkg:存放DTO类

当本项目作为其他项目的依赖时,只对外提供pkg文件夹的内容,项目文件结构如下:

pkg
│  └── package files . . .
src
│  └── project files . . .
├── package.pkg.json
└── package.src.json

对应的两个配置文件内容:

package.pkg.json:

{
  "name": "@example/service-a",
  "version": "1.0.0",
  "files": [
    "dist/pkg"
  ],
  "main": "dist/pkg/index.js",
  "types": "dist/pkg/index.d.ts"
}

package.src.json:

{
  "name": "@example/service-a",
  "version": "1.0.0",
  "main": "dist/src/main.js",
  "dependencies": {
    "some-dependency": "1.0.0",
    "another-dependency": "1.0.0"
  }
}

拆分的核心目的是:当本服务作为包被其他项目安装时,不会附带安装服务自身的生产依赖,避免依赖暴露内部实现(比如服务B依赖服务A时,不会拿到A的内部依赖)。请问这种配置能实现吗?

回答

能实现,这种拆分方式刚好能满足你把公共DTO和服务核心代码解耦、避免依赖冗余暴露的需求,具体可按以下步骤操作:

1. 分离构建脚本

在项目根目录新增一个基础package.json(用来管理本地开发的脚本和基础配置),添加针对src和pkg的编译命令:

{
  "scripts": {
    "build:pkg": "tsc --project tsconfig.pkg.json", // 假设使用TypeScript,需对应编写pkg的编译配置
    "build:src": "tsc --project tsconfig.src.json",
    "build": "npm run build:pkg && npm run build:src"
  }
}

其中tsconfig.pkg.json仅编译pkg目录,输出到dist/pkg;tsconfig.src.json负责编译src目录到dist/src。

2. 按pkg配置发布包

发布时仅用package.pkg.json作为发布配置,确保只对外提供DTO相关内容:

  • 先执行npm run build:pkg完成pkg目录的编译
  • 将package.pkg.json复制到dist/pkg目录下,或者直接指定配置文件发布:
npm publish dist/pkg --access public

这样发布到npm的包只会包含dist/pkg内的内容,不会携带src相关代码及其依赖。

3. 本地开发用src配置

本地运行服务时,使用package.src.json来管理依赖和启动:

  • 可以将package.src.json复制为根目录的package.json,或者执行以下命令安装依赖:
npm install --package-lock-only --package package.src.json
  • 启动服务的脚本直接指向dist/src/main.js即可。

关键注意事项

  • 两个配置文件的name和version必须完全一致,否则会被识别为不同的npm包
  • 确保package.pkg.json的files字段仅包含dist/pkg,防止意外打包多余内容
  • 如果是私有组织包,发布时需添加--access restricted参数

内容的提问来源于stack exchange,提问作者Enthys

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:56:08