我正在使用NX monorepo,其中包括Expo React Native应用程序和多个库.我遇到了一个问题,从应用程序内的库导入组件会导致

Error: Cannot resolve @monorepo/account-manager

我的NX工作区的libs文件夹中有一个名为account-manager的库.在这个库中,有一个组件App.tsx,我将其输出到index.tsx文件中:

export {default as App} from "../src/app/App"

在我的根tsconfig.base.json中,我添加了以下内容:

    "paths": {
      "@monorepo/account-manager": ["libs/account-manager/src/index.tsx"]
    }

我在我的项目中像这样导入它(忽略命名):

import React from 'react';
import {App as Hello} from "@monorepo/account-manager"


const App = () => (
  <Hello/>
);

export default App;

我使用以下命令生成了库: npx nx g @nx/expo:图书馆

try 导入输出组件后的完整错误是这样的:

error: Error: Cannot resolve @monorepo/account-manager
    at firstResolver (C:\DEV\monorepo\node_modules\@nx\expo\plugins\metro-resolver.js:33:15)
    at firstResolver (C:\DEV\monorepo\node_modules\expo\node_modules\@expo\cli\src\start\server\metro\withMetroResolvers.ts:108:16)
    at resolveRequest (C:\DEV\monorepo\node_modules\expo\node_modules\@expo\cli\src\start\server\metro\withMetroResolvers.ts:137:16)
    at Object.resolve (C:\DEV\monorepo\node_modules\metro-resolver\src\resolve.js:32:12)
    at ModuleResolver.resolveDependency (C:\DEV\monorepo\node_modules\metro\src\node-haste\DependencyGraph\ModuleResolution.js:73:31)
    at DependencyGraph.resolveDependency (C:\DEV\monorepo\node_modules\metro\src\node-haste\DependencyGraph.js:231:43)
    at C:\DEV\monorepo\node_modules\metro\src\lib\transformHelpers.js:156:21
    at resolveDependencies (C:\DEV\monorepo\node_modules\metro\src\DeltaBundler\buildSubgraph.js:42:25)
    at visit (C:\DEV\monorepo\node_modules\metro\src\DeltaBundler\buildSubgraph.js:83:30)
    at async Promise.all (index 2)
    at visit (C:\DEV\monorepo\node_modules\metro\src\DeltaBundler\buildSubgraph.js:92:5)
    at async Promise.all (index 0)
    at buildSubgraph (C:\DEV\monorepo\node_modules\metro\src\DeltaBundler\buildSubgraph.js:103:3)
    at Graph._buildDelta (C:\DEV\monorepo\node_modules\metro\src\DeltaBundler\Graph.js:157:22)
    at Graph.initialTraverseDependencies (C:\DEV\monorepo\node_modules\metro\src\DeltaBundler\Graph.js:140:19)
    at DeltaCalculator._getChangedDependencies (C:\DEV\monorepo\node_modules\metro\src\DeltaBundler\DeltaCalculator.js:151:25)

我已经try 将文件名从index.ts = index.tsx更改 此外,我还try 将"paths"对象添加到项目tsspread.json中.

推荐答案

目前NX Expo Monorepos存在一个错误.我发现了一个github问题并给出了解决方案:

在您想要导入库的应用程序的此文件metro.config.js中,您需要在watchspreadArray内手动添加库的路径(错误来自withNxMetro()函数.NX正在修复错误):

如下调整watchfolders:

const path = require('node:path');

watchFolders: [
  path.resolve("../..", "libs")
],

如果您收到有关babel-plugin-module-resolver的错误,只需安装此库:

npm i babel-plugin-module-resolver

之后一切应该又好起来了.

Typescript相关问答推荐

如何根据参数的值缩小函数内的签名范围?

Angular 17 Select 错误core.mjs:6531错误错误:NG 05105:发现意外合成监听器@transformPanel.done

typescript抱怨值可以是未定义的,尽管类型没有定义

如何创建泛型类型组件来使用React Native的FlatList或SectionList?'

使用带有RxJS主题的服务在Angular中的组件之间传递数据

TypeScript Page Routing在单击时不呈现子页面(React Router v6)

在键和值为ARGS的泛型函数中未正确推断类型

类型脚本可以推断哪个类型作为参数传递到联合类型中吗?

重载函数的T helper参数

为什么Typescript只在调用方提供显式泛型类型参数时推断此函数的返回类型?

界面中数组中的混合类型导致打字错误

从类型脚本中元组的尾部获取第n个类型

从以下内容之一提取属性类型

作为参数的KeyOf变量的类型

有没有一种方法可以提升对象的泛型级别,而对象的值是泛型函数?

打字:注解`是字符串`而不是`布尔`?

断言同级为true或抛出错误的Typescript函数

如何确定剧作家中给定定位器的值?

redux-toolkit、createAsyncThunk 错误

如果父级被删除或删除,如何自动删除子级?