我已经建立了一个带有纱线工作区的 monorepo,其中包含一个 react & react-native 应用程序。这是结构:
├── package.json
├── packages
│ ├── shared
│ │ ├── package.json
│ │ └── components
│ ├── mobile
│ │ ├── android
│ │ ├── ios
│ │ ├── package.json
│ │ ├── src
│ │ ├── tests
│ │ └── yarn.lock
│ └── web
│ ├── public
│ ├── src
│ └── package.json
└── yarn.lock
为了在两个应用程序之间共享逻辑,表示组件被包装在ExampleComponentContainer.js
which importExampleComponent.native.js
或ExampleComponent.js
中,具体取决于捆绑器。我将 redux 和 react-redux 添加到共享包package.json
中,并将它们导入 ExampleComponentContainer.js 和两个应用程序的入口点 App.js。虽然 webpack 从根 node_modules 文件夹导入模块没有问题,但如果我将它们指定为,metro 只会为 react-native 应用程序挑选它们
import {useDispatch, useSelector} from '../../../../node_modules/react-redux/dist/react-redux';
只是使用
import {useDispatch, useSelector} from 'react-redux';
不工作。这是我得到的错误:
这是我的 metro.config.js:
const path = require('path');
module.exports = {
projectRoot: path.resolve(__dirname, '../../'),
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
},
}),
},
};
感谢任何提示如何解决这个问题。