React native 在世博会中,要求模块;取回;,引发异常:ReferenceError:Can';找不到变量:self

React native 在世博会中,要求模块;取回;,引发异常:ReferenceError:Can';找不到变量:self,react-native,fetch,expo,npm-scripts,React Native,Fetch,Expo,Npm Scripts,我已经搜索了各种可能的答案,但没有找到任何合适的方法来解决这个特定的错误 我在问题标题中提到了确切的错误字符串。在我的ReactNative应用程序中安装fetchnpm模块时,开始出现此错误。在开发过程中,此错误仅出现在我的手机上启动/加载应用程序时。在安装fetch之前,我的应用程序已在手机上正确加载。在windows CLI中,没有此类错误可以帮助我解决问题,它只是表明构建成功 我正在使用Expo进行我的ReactNative应用程序开发。请在这方面协助解决该问题。更多详细信息可在以下附加

我已经搜索了各种可能的答案,但没有找到任何合适的方法来解决这个特定的错误

我在问题标题中提到了确切的错误字符串。在我的
ReactNative
应用程序中安装
fetch
npm模块时,开始出现此错误。在开发过程中,此错误仅出现在我的手机上启动/加载应用程序时。在安装
fetch
之前,我的应用程序已在手机上正确加载。在windows CLI中,没有此类错误可以帮助我解决问题,它只是表明构建成功

我正在使用
Expo
进行我的
ReactNative
应用程序开发。请在这方面协助解决该问题。更多详细信息可在以下附加屏幕(显示堆栈跟踪)中看到:

Package.json

{
    "name": "my-new-project",
    "main": "node_modules/expo/AppEntry.js",
    "private": true,
    "scripts": {
        "start": "expo start",
        "android": "expo start --android",
        "ios": "expo start --ios",
        "eject": "expo eject",
        "test": "node ./node_modules/jest/bin/jest.js --watchAll"
    },
    "jest": {
        "preset": "jest-expo"
    },
    "dependencies": {
        "@expo/samples": "2.1.1",
        "expo": "29.0.0",
        "fetch": "^1.1.0",
        "react": "16.3.1",
        "react-native": "https://github.com/expo/react-native/archive/sdk-29.0.0.tar.gz",
        "react-navigation": "^2.9.3"
    },
    "devDependencies": {
        "jest-expo": "29.0.0"
    }
}

这是一个非常奇怪的问题,当我卸载
获取
并尝试使用任何其他库(例如
axios
)时,仍然会出现对相同错误(与获取模块相关)的引用。我已经重新启动了笔记本电脑,也重新启动了手机上的Expo应用程序。

我认为fetch 1.1.0不能在React-Native上正常工作,因为React-Native使用的是JS核心而不是NodeJS。 我希望您使用库
axios
或React Native()的内置“fetch”

npm安装axios——保存

范例

// Want to use async/await? Add the `async` keyword to your outer function/method.
async function getUser() {
  try {
    const response = await axios.get('/user?ID=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}


我已经弄明白了,基本上这不是npm
npm
问题,也不是npm
fetch
组件问题。基本上,在设置项目之后,我运行了
npm install expo cli
,当我尝试运行
expo start
npm start
时,cli中出现了哪条消息。此时有新版本可用,
v30.x.x
,是的,
self
参考版本在较旧的
expo
版本中,但不在
v30.x.x

安装
expo cli
后,它与我现有的project expo配置和安装的文件不匹配,因此我重新设置了项目,加载并安装了最新版本库,并将项目文件保存到其中


轰!这次应用程序运行时没有出现任何错误。

在我这方面,每次关闭并重新启动电脑时都会触发错误(我在Ubuntu 16.04上开发)

我使用了一个旧答案(2016年),完全解决了这个问题:

我补充说:

global.self = global;
进入主
js
文件

一切都恢复正常了


expo cli
位于
2.2.4
(最新版本)

该问题似乎是由新版本的
whatwg fetch
产生的。对我有效的解决方案是明确添加旧版本:


npm i whatwg-fetch@2.0.4

纱线添加量-fetch@2.0.4


获取的解决方案这很奇怪,我卸载了
fetch
,并重新安装了
expo cli
(全局),但仍然存在对自我错误的引用。看来我必须从头开始重新创建整个项目。我还运行了
npm cache clean--force
,但没有成功。有什么建议吗?我认为您仍然需要删除节点_模块,然后使用
rm-rf节点_模块
npm安装
重新安装。需要重新启动dev服务器。我更喜欢使用命令
npm start--reset cache
warn start--reset cache
启动dev服务器,因为我已经删除了节点模块/目录。重新启动计算机,然后运行
npm安装
,但未成功。与我最初发布的相同的问题。尽管您提到了npm启动,但在我的机器上,这几天的工作不正常,为此,我在这里发布了一个单独的问题:我升级到expo-cli@2.2.0产生了这个错误。降级为世博会-cli@2.1.3重新运行。此问题在expo
v32.0.0
中持续存在。降级并不是真正的解决方案。您没有在帮助您解决问题的详细答案中添加引用。另外,如果您通过新的main
.js
文件语法来显示您添加此内容的确切位置,则会更好。导入后,我将该行添加到我的
App.js
,一切都是金色的
global.self = global;