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

在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源码,开发时无需等待编译即可实时获取类型和代码更新:

  1. 配置pkg2的tsconfig.json,开启复合项目模式:
// pkg2/tsconfig.json
{
  "compilerOptions": {
    "composite": true,
    "outDir": "./lib",
    "rootDir": "./src",
    // 其他TS配置(如target、module等)
  },
  "include": ["src/**/*"]
}
  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:06:06