在后端,响应和反应本机客户端之间共享打字稿代码

我已经开始将我的项目转换为打字稿,同时我决定改进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中使用rootDirspaths 。 Typescript编译器不会合并/捆绑输出,所以这意味着我需要支持3种不同的解决scheme来合并生成的代码。 也不适合我的IDE。
  • 使用WML 。 我尝试了两种方法:
    • commonsclients链接到web / mobile / server的node_modules内的包。 要做到这一点,我必须生成声明,因为它需要公开所有导入(请参见此问题 ),因此会造成负担。 用纱线也不能很好地发挥作用,每次安装新的东西时都会去掉链接的包装。
    • 链接commonsclients ,将源文件夹分离到web,mobile和后端的源文件夹中。 这是我在我的项目的当前JS版本中使用的。 它有效,但有一些缺点:
      • 相对较长的import(可能通过支持3种不同的模块别名解决scheme来解决)
      • wml有时会在后台中断,这会导致一些混淆,尽pipe容易发现错误
      • 热重装不好

我正在寻找一个不太复杂的解决scheme(需要在web / mobile / backend方面configuration最less),并且和Webstorm一起使用。 它现在可能不存在,所以我想听听其他解决scheme的人在这里用于类似的项目设置。

在与你类似的情况下,我做了以下几点:

  1. commons作为一个单独的npm包被发布。 如有必要,您可以将其设为私人。

  2. clients依赖于commons套餐,并发布到npm。 再次 – 私人如果需要的话。

  3. webmobile项目都重用了上面创build的npm包。