TypeScript是否内置方法在Monorepo中解析编译内部依赖以用于发布?
TypeScript Monorepo 内部依赖编译整合方案
我有一个基于npm workspace的Monorepo,根目录package.json配置如下:
{ "workspaces": [ "packages/*" ] }
packages目录下包含三个子项目:
a(包名"name": "a")b(包名"name": "b")shared(包名"name": "@internal/shared")
a和b依赖@internal/shared实现代码复用,比如在b/src/index.ts中可以这样编写导入:
import {something} from '@internal/shared';
由于是Monorepo内部包,本地开发时该导入能正常解析。但@internal/shared属于内部依赖,不会发布至npm,因此编译a或b时,需要将共享代码整合到各自的构建产物中,避免发布后出现无效引用。理想状态是:当tsconfig配置"outDir": "lib"后,编译后的导入语句变为:
import {something} from './@internal/shared/index.js';
同时lib目录需包含当前包的编译文件,以及./@internal/shared/**/*.js相关代码。
TypeScript本身没有内置这种直接将内部依赖代码打包到当前包构建产物并修改导入路径的功能。
要实现该需求,需借助额外工具或手动处理:
- 使用打包工具:通过Rollup、Webpack或esbuild等工具,配置将
@internal/shared的代码打包进a或b的产物中,同时自动重写导入路径。这类工具还支持tree-shaking,可优化产物体积。 - 自定义脚本处理:TypeScript编译完成后,编写Node.js脚本,将
@internal/shared的编译产物复制到a/lib/@internal/shared或b/lib/@internal/shared目录,再批量替换产物中的导入路径,将@internal/shared替换为相对路径./@internal/shared/index.js。 paths配置+复制脚本:在a和b的tsconfig中配置paths,将@internal/shared映射到本地../shared/src路径,编译后手动复制共享代码到输出目录对应位置,最后调整导入路径。
内容的提问来源于stack exchange,提问作者vdegenne
相关产品推荐
相关产品推荐

