在后端,响应和反应本机客户端之间共享打字稿代码
我已经开始将我的项目转换为打字稿,同时我决定改进node.js后端之间的代码重用,响应Web客户端和反应本地移动客户端。
这是我的项目结构:
├ 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问题 )。 这可能可以通过使用拖运来解决,但是通过使用打字稿拖运工作增加了额外的复杂性。 另外,拖延似乎不适用于移动中心,我用它来发布移动应用程序
- 在tsconfig.json中使用
rootDirs
或paths
。 Typescript编译器不会合并/捆绑输出,所以这意味着我需要支持3种不同的解决scheme来合并生成的代码。 也不适合我的IDE。 - 使用WML 。 我尝试了两种方法:
- 将
commons
和clients
链接到web / mobile / server的node_modules
内的包。 要做到这一点,我必须生成声明,因为它需要公开所有导入(请参见此问题 ),因此会造成负担。 用纱线也不能很好地发挥作用,每次安装新的东西时都会去掉链接的包装。 - 链接
commons
和clients
,将源文件夹分离到web,mobile和后端的源文件夹中。 这是我在我的项目的当前JS版本中使用的。 它有效,但有一些缺点:- 相对较长的import(可能通过支持3种不同的模块别名解决scheme来解决)
- wml有时会在后台中断,这会导致一些混淆,尽pipe容易发现错误
- 热重装不好
- 将
我正在寻找一个不太复杂的解决scheme(需要在web / mobile / backend方面configuration最less),并且和Webstorm一起使用。 它现在可能不存在,所以我想听听其他解决scheme的人在这里用于类似的项目设置。
在与你类似的情况下,我做了以下几点:
-
commons
作为一个单独的npm包被发布。 如有必要,您可以将其设为私人。 -
clients
依赖于commons
套餐,并发布到npm。 再次 – 私人如果需要的话。 -
web
和mobile
项目都重用了上面创build的npm包。