我有一个包含 3 个包的 typescript mono-repo,如下所示:
- 包 A:使用包 B 和 C 的 React 单页应用程序。
- 包 B:一个使用包 C的 UI 库。
- 包 C:具有 3rd 方依赖项的实用程序包。
我的目标是避免在开发过程中每次更改依赖项后的构建周期,因此我想直接使用包 B 和 C 的打字稿源代码,并可能享受 HMR(热重载)。
这是漫长的一天。
如果您希望避免我对我迄今为止的不同尝试的描述并直接跳到问题,请跳到最后两段。
我的一天从定义路径字段开始tsconfig.json
:
{
"compilerOptions": {
...,
"baseUrl": "../",
"paths": {
"@package-b": ["path-to-package-b"],
"@package-c": ["path-to-package-c"]
}
},
}
我很快意识到我必须留下create-react-app因为它不支持路径 alias。尝试使用不同的 CRA 重新布线技术导致我遇到可怕的无效挂钩调用,这意味着react
不知道如何解决不同版本的react-dom
. 调整noHoist
并没有帮助解决它,也没有按照他们的文档中的建议进行符号链接。
总结随后的尝试:
- 我尝试过使用yalc。当与 CRA 一起使用时,它似乎仍然需要一个构建周期,
create-react-app
因为它不编译依赖项。 - 我已经尝试过自定义webpack构建。没有成功使它工作。确实花了很多时间让资产加载器 识别我的图像。
- 我试了一下雪包。与名为@fluentui/react的第 3 方有问题,它无法编译并导致我遇到一个未解决的问题。我意识到我必须分叉并调查它才能继续并决定继续前进。
- 我什至查看了硬链接目录,
bindfs
但似乎你需要macFuse
它,它在安装过程中要求广泛的系统扩展权限。 - 我目前正在尝试vite,它
snowpack
也支持native esmodules
当你试图避免构建周期时很有希望。
我正在寻找一种解决方案,可以使用任何捆绑器为根 SPA 包和多个 typescript 包运行开发环境,这些包相互依赖,无需 fs-watching 和构建周期。
在将此问题标记为
"primarily opinion based"
注意之前,一个好的答案可以帮助未来的读者避免我今天所做的来回尝试。在这方面, Eventhis can be done with any bundler by leveraging this or that option
是一个很好的答案。