能否配置两个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
相关产品推荐
相关产品推荐

