【发布时间】:2018-01-15 20:39:39
【问题描述】:
我已经开始将我的项目转换为 typescript,同时我决定改进 node.js 后端、react web 客户端和 react-native 移动客户端之间的代码重用。
这是我的项目结构:
├ commons (code shared between backend and frontend, mostly type definitions and utils
├ clients (code shared between web and mobile clients, depends on commons: containers, utils, forms... )
├ backend (express server, depends on commons)
├ web (create-react-app, not ejected, no SSR needed, depends on clients)
├ mobile (react-native client, depends on clients)
到目前为止我已经尝试过:
- 符号链接。无法让它们与 react-native 一起使用(请参阅 metro bundler issue)。 这可能可以通过使用 haul 来解决,但是通过使 haul 与 typescript 一起工作会增加额外的复杂性。此外,我用来发布移动应用的 Mobile Center 似乎无法使用 haul
- 在 tsconfig.json 中使用
rootDirs或paths。 Typescript 编译器不合并/捆绑输出,所以这意味着我需要支持 3 种不同的解决方案来合并生成的代码。也不适用于我的 IDE。 - 使用WML。我尝试了两种方法:
- 将
commons和clients链接到 web/mobile/server 的node_modules内的包。为此,我必须生成声明,这很麻烦,因为它需要公开所有导入(请参阅this issue)。也不能很好地与纱线一起使用,每次安装新东西时都会删除链接的包。 - 将
commons和clients链接到Web、移动和后端源文件夹内的单独源文件夹。这是我在我的项目的当前 JS 版本中使用的。它有效,但它有一些缺点:- 长相对导入(可能可以通过支持 3 种不同的模块别名解决方案来解决)
- wml 有时会在后台中断,虽然容易发现错误,但会导致一些混乱
- 不适合热重载
- 将
我正在寻找一种不太复杂的解决方案(在网络/移动/后端方面需要最少的配置)并且可以很好地与 Webstorm 配合使用。 它现在可能不存在,所以我想听听这里的人们在类似的项目设置中使用了哪些其他解决方案。
【问题讨论】:
标签: node.js reactjs typescript react-native