无法在 expo-react-native 应用程序上运行"expo start",权限问题



好吧,我看到这个网站上已经有很多与我的问题相关的问题,但我也看到没有一个解决方案适用于我的具体情况,因此,我正在打开这个问题,所以它不是重复的。

上下文(环境)

  • Linux Mint 19.1 肉桂
  • 世博会 v32
  • 反应本机应用程序
  • GitHub 私有存储库(我克隆应用程序的位置)
  • 节点最新 LTS (v10.15.1)
  • NPM v6.4.1
  • /\ 两者都使用 NVM(节点版本管理器)

包.json

{
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"eject": "expo eject"
},
"dependencies": {
"@expo/vector-icons": "^9.0.0",
"expo": "^32.0.0",
"lodash.clonedeep": "^4.5.0",
"native-base": "^2.10.0",
"react": "16.5.0",
"react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
"react-native-credit-card-input": "https://github.com/itspauloroberto/react-native-credit-card-input.git",
"react-native-password-strength-meter": "https://github.com/itspauloroberto/react-native-password-strength-meter.git",
"react-native-responsive-screen": "^1.2.0",
"react-native-scalable-image": "^0.5.0",
"react-navigation": "^3.0.9",
"react-redux": "^6.0.0",
"redux": "^4.0.1",
"redux-form": "^8.1.0",
"redux-saga": "^0.16.2",
"url-join": "^4.0.0",
"vanilla-masker": "^1.2.0"
},
"devDependencies": {
"babel-preset-expo": "^5.0.0"
},
"private": true
}

问题所在

我的问题是当我尝试运行以下命令时expo startnpm start相同。

我几乎不相信这是一个操作系统问题,因为上周我在另一个操作系统elementary-os上使用相同的项目,我没有任何问题!

然后我在执行expo startnpm start时收到此错误:

Uncaught Error { [Error: EACCES: permission denied, open '/home/itspauloroberto/.expo/state.json.354451305']
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/home/itspauloroberto/.expo/state.json.354451305' }

如何重现它:

  • 安装/使用OS Linux Mint 19.1 Cinnamon。
  • 安装 nvm(节点版本管理器)
  • 使用nvm install 10.15.1安装 npm 和节点
  • 使用npm install expo-cli安装 expo-cli
  • 使用expo init创建新的世博会反应原生项目。
  • 尝试使用expo start运行它。

我尝试过什么

首先,我确定这个项目/应用程序运行正常,因为我上周有另一个操作系统(elementaryOS),我正在处理这个项目没有问题,而且我有一个团队也没有问题。

  • 我试图重新安装我的nodenpm以及expo-cli.
  • 我试图rm -rf node_modulesnpm install.
  • 我试图删除package.lock.json并再次npm install
  • 我尝试为npm全局安装设置全局目录,并允许如此处所述
  • 我尝试安装nvm节点版本管理器(我正在使用它 atm)。
  • 我试图chown myuser project-folder让我的用户访问该文件夹(在 .expo 文件夹和node_modules文件夹上也尝试过)
  • 我试图chmod 777 and 755 and 655整个项目文件夹。
  • 我尝试运行带有sudo前缀的expo startnpm start命令,但 sudo 找不到expo或两者都没有npm
  • 我尝试删除存储库并再次使用git clone克隆它。
  • 还有很多很多其他的事情。(我也做过猎物)
  • 此外,没有 SELinux 参与,如下所示:

    ls -ld

    drwxr-xr-x 2 itspauloroberto itspauloroberto 4096 Feb 20 14:54 .

正因为如此,我正在创建这个问题,即使我在许多网站上看到此错误,也没有一个网站有我的上下文。

我发现了问题!

主要原因是,在某些时刻,我使用sudo安装了与 expo 相关的东西,然后 expo 在另一个目录中创建了一些属于root用户的文件,该目录不在我正在处理的项目文件夹中。

所以这是因为 expo 在最初安装 expo 时的初始文件显然是使用sudo安装的,因为这个目录中的文件:home/itspauloroberto/.expo并且该文件夹归root所有(我使用la -ls命令检查它并将root视为所有者)而不是我的用户itspauloroberto这是错误的主要来源。

要消除此错误,请执行以下步骤:

  • 导航到home/your_user/目录。
  • 使用sudo rm -rf .expo删除.expo文件夹(需要 sudo,因为文件夹所有者是 root)
  • 使用expo start再次运行世博会

如果发现与某个目录或文件相关的任何其他错误,请导航到错误消息上的文件/目录并将其删除。因为它也应该属于root用户。

我遇到了这个问题,因为我一直在本地使用cmd,并在 Ubuntu WSL2 子系统中猛击。

我必须从 ubuntu 终端安装了一些软件包,所以除了从我的 WSL 主目录中删除.expo文件之外,我还必须删除我的node_modules文件,并从我的 windows-cmd 控制台运行npm install

先卸载 expo。 然后卸载 npm 并重新安装 npm 然后 expo

通常当您看到如下错误时:

未捕获的错误错误: EACCES: 权限被拒绝,打开"/Users/r/.expo/state.json.728296139">

您可以尝试再次运行该命令,但前面有 sudo。

例如,下面的错误:

expo init my-app
Uncaught Error Error: EACCES: permission denied, open '/Users/r/.expo/state.json.728296139'

可以通过以下方式解决:

$ sudo expo init my-app
Password:

最新更新