在Yarn Workspaces中能否直接导入子模块原始TS文件而非编译JS文件?
在Yarn Workspaces中本地开发时直接导入其他包的TS源码
以下是几种可行的实现方式,按需选择:
方案1:通过package.json的exports字段区分环境入口
在pkg2/package.json中新增exports字段,为开发环境指定TS源码入口,生产环境沿用编译后的lib目录文件:
// pkg2/package.json { "main": "lib/index.js", "exports": { ".": { "development": "./src/index.ts", "default": "./lib/index.js" } } }
同时需要确保你的TypeScript配置能识别pkg2的源码目录:
- 可以在根目录的
tsconfig.json中把packages/**/src/**/*加入include数组; - 或者在pkg1的
tsconfig.json中单独添加../pkg2/src/**/*到include。
方案2:使用TypeScript项目引用(Project References)
利用TS原生的项目引用功能,让pkg1直接依赖pkg2的TS源码,开发时无需等待编译即可实时获取类型和代码更新:
- 配置pkg2的
tsconfig.json,开启复合项目模式:
// pkg2/tsconfig.json { "compilerOptions": { "composite": true, "outDir": "./lib", "rootDir": "./src", // 其他TS配置(如target、module等) }, "include": ["src/**/*"] }
- 在pkg1的
tsconfig.json中添加对pkg2的引用:
// pkg1/tsconfig.json { "compilerOptions": { // 你的项目TS配置 }, "references": [{"path": "../pkg2"}], "include": ["src/**/*", "../pkg2/src/**/*"] }
开发时执行tsc --build即可实现增量编译,编辑器也会自动识别源码依赖,实时同步pkg2的代码变更。
方案3:配置导入别名
通过TS的paths或构建工具的别名功能,将pkg2的导入路径直接指向其src目录:
TypeScript别名配置
// pkg1/tsconfig.json { "compilerOptions": { "baseUrl": ".", "paths": { "pkg2": ["../pkg2/src/index.ts"] } } }
构建工具别名示例(以Vite为例)
// pkg1/vite.config.ts import { defineConfig } from 'vite'; export default defineConfig({ resolve: { alias: { 'pkg2': '../pkg2/src/index.ts' } } });
注意:这种方式需要在生产环境切换回lib/index.js,建议通过环境变量区分配置。
内容的提问来源于stack exchange,提问作者eder
相关产品推荐
相关产品推荐

