如何在 monorepo 中的 React Native 和 Next.js 之间共享未编译的打字稿?

Xii*_*ryo 10 typescript react-native lerna monorepo next.js

我已经用 Lerna 和 Yarn Workspaces 解决了一个具有以下结构的 monorepo:

project
| - packages
    | - ReactNativeApp
    | - NextJsApp
    | - FirebaseCloudFunctions
    | - Common 
        | - src > source TypeScript
        | - lib > compiled TypeScript > published to npm for reuse by cloud functions in Firebase
    | - AppsCommon
        | - src > source TypeScript
        | - lib > compiled TypeScript
Run Code Online (Sandbox Code Playgroud)

我有几个问题。一个是 React Native 无法解析符号链接,另一个是来自 Firebase 的错误消息在从 React Native Firebase 传输到 AppsCommon 到 ReactNativeApp 时发生更改,而如果我在 ReactNativeApp 中复制 AppsCommon 源 TypeScript,则不会发生这种情况。

我认为我需要使用 Yarn Workspaces,因为 React Native 不能很好地管理符号链接,这使得管理起来极其复杂。据我了解可以这样实现吗?

// replace
import { function } from '@project/appsCommon'
// by:
import { function } from '../../appsCommons'
Run Code Online (Sandbox Code Playgroud)

我还尝试将package.json和tsconfig.json中的lib替换为src,以使其成为未编译的TypeScript包,但它没有解析。

然后,使用 Lerna,我尝试直接导入其他包的 src 文件夹。可能会出什么问题?

import { function } from '../../../common/src'
Run Code Online (Sandbox Code Playgroud)

也许在 React Native 中是这样的:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeDexDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > java.nio.file.NoSuchFileException: C:\code\Experimental\monorepo\packages\mobile\android\common\build\intermediates\external_file_lib_dex_archives\debug\out
Run Code Online (Sandbox Code Playgroud)

是的... Common 中没有 android 文件,这是正常的,因为它们在 ReactNativeApp 中... 为什么你在这里搜索 React Native ???

有没有一种方法可以创建未编译的 TypeScript 包?或者有一个简单的方法来处理这个用例?