我将metro.config.js
配置为extraNodeModules
设置,因此metro将从我的项目外部找到我的共享模块('monorepo'配置)。
Metro正在寻找我的外部模块(见下面的dumb-module),但是当外部模块试图导入react时,我得到了一个错误。当导入的模块没有导入react时,我没有得到任何错误。
错误如下:
Unable to resolve module @babel/runtime/helpers/interopRequireDefault from /Users/jim/.../modules/dumb-module/index.js: @babel/runtime/helpers/interopRequireDefault could not be found within the project.
If you are sure the module exists, try these steps:
1. Clear watchman watches: watchman watch-del-all
2. Delete node_modules and run yarn install
3. Reset Metro's cache: yarn start --reset-cache
4. Remove the cache: rm -rf /tmp/metro-*
> 1 | import React from 'react';
2 | import { Text } from 'react-native';
3 |
4 | const DumbModule = () => {
因为它显示了dumb-module的内容,所以它显然能够找到我的外部模块。但是它看起来不能解析试图导入react的模块。
如你所料,我什么都试过了。我很乐意在这里得到一些想法。 <标题>metro.config.js h1> dumb-module/index.js h1> 博会诊断:expo diagnostics
Expo CLI 4.12.0 environment info:
System:
OS: macOS 11.6
Shell: 5.8 - /bin/zsh
Binaries:
Node: 14.16.1 - ~/.nvm/versions/node/v14.16.1/bin/node
Yarn: 1.22.11 - ~/.nvm/versions/node/v14.16.1/bin/yarn
npm: 7.24.0 - ~/.nvm/versions/node/v14.16.1/bin/npm
Managers:
CocoaPods: 1.11.2 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: iOS 15.0, DriverKit 20.4, macOS 11.3, tvOS 15.0, watchOS 8.0
IDEs:
Xcode: 13.0/13A233 - /usr/bin/xcodebuild
npmPackages:
expo: ~42.0.1 => 42.0.4
react: 16.13.1 => 16.13.1
react-dom: 16.13.1 => 16.13.1
react-native: https://github.com/expo/react-native/archive/sdk-42.0.0.tar.gz => 0.63.2
react-native-web: ~0.13.12 => 0.13.18
npmGlobalPackages:
expo-cli: 4.12.0
Expo Workflow: managed
标题>所以,这实际上工作得很好,我的问题是我没有正确重置地铁缓存。
我将留下这篇文章,因为这个metro.config.js
是解决方案的一部分,让一个博览会应用程序在单线程内工作,并利用共享组件。
另一部分是在博览会应用程序文件夹上使用yarn的nohoist
选项,因此其依赖项保持在其node_modules
内。