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

JS/TS多项目代码复用:如何便捷复用units模块?求分步方案

代码复用方案探索

可能还有我没发现的解决方案,我试过很多方法:搭配npm link的JS/TS、Git子模块、tsconfig paths、符号链接、npm/pnpm/yarn工作区、npm pack & npm link、package.json exports、package.json commonjs/module,还有nx(nrwl)/lerna,但每种都有问题,目前没找到便捷的标准方案。

问题描述

作为开发者,我的需求是:

  • 编写可复用的代码
  • 启动新项目时仅引入所需代码
  • 多项目间共享代码且支持同步更新
  • 需要清晰的分步实现指引
  • 使用JetBrains IntelliJ IDEA作为开发工具

同时我有明确的排斥点:

  • 不想因包管理、配置、命令等额外操作打乱代码结构或拖慢开发节奏
  • 因为有数十个项目,IDE的搜索、替换等操作性能会受影响,因此不能使用单体仓库(monorepo)

代码结构

/unit_domain_project_1
  .git
  package.json
  /src
    /units # 可复用库
      /meter.ts # 核心模块
      /meter.test.ts # 单元测试文件
    /nodejs
      # 仅Node.js环境可用的TS代码(无法在浏览器编译)
    /browser
      # 仅浏览器环境可用的TS代码(无法在Node.js编译)

/furniture_project_2
  .git
  package.json
  /src
    table.ts # 此处需要复用`units`模块

/building_project_3 # 嵌套依赖示例
  /src
    house.ts # 此处需要复用`table`以及`units/meter`

当前临时方案

目前找到的最优临时方案是使用符号链接,执行命令如下:

ln -s $ABSOLUTE_PATH_TO_PROJECT_1/units

但该方案在Docker环境下需要额外编写Shell脚本完成代码复制(例如copy ./linked_code_source ./linked_code),增加了复杂度。

核心问题

如何便捷复用units模块?(需提供分步实现指引)

其他方案为何不理想

  • git submodules:每个项目都要单独执行git pull/push操作,流程繁琐
  • symlink:Docker环境下需要额外编写Shell脚本处理代码复制,无法直接复用链接
  • tsconfig paths:不支持跨父目录的相对路径配置,IDE无法正常解析依赖
  • package.json exports: {'*./'}:与package.json commonjs/module配置冲突,必须将TypeScript编译为JS模块,还会频繁遇到依赖和路径解析问题,调试耗时极长
  • npm link:Docker环境下无法正常工作,需要额外Shell脚本适配
  • npm/pnpm/yarn workspace:依赖特定npm/node版本,采用符号链接或文件复制的方式,无法自动同步更新,需要编写post_install脚本并重新构建包
  • npm pack & npm link:需要自行编写更新脚本,无法实现自动同步
  • nx(nrwl)/lerna:必须遵循其指定的目录结构,还要强制使用构建命令,需将代码拆分为独立库并配置package.json,引入了不必要的复杂度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:11:07