将 Expo Project 弹出到 Bare React Native 时出错

Posted

技术标签:

【中文标题】将 Expo Project 弹出到 Bare React Native 时出错【英文标题】:Error while ejecting Expo Project to Bare React Native 【发布时间】:2020-05-24 17:35:34 【问题描述】:

我目前正在尝试弹出我在 expo 中创建并上传到 App Store 的应用程序以进行原生反应。我想实现一些功能,但我似乎找不到使用 expo 的解决方案,而且我还想扩展我的 react native 知识。但是,每当我运行“expoject”时,我都会收到以下错误。

Eject Expo Error

40991 info lifecycle firebase@7.5.2~postinstall: firebase@7.5.2

40992 愚蠢的安装后 jest@24.1.0 40993 信息生命周期 jest@24.1.0~postinstall: jest@24.1.0 40994 愚蠢的安装后 Metro-react-native-babel-preset@0.54.0 40995 信息生命周期 Metro-react-native-babel-preset@0.54.0~postinstall:metro-react-native-babel-preset@0.54.0 40996 愚蠢的安装后 react@16.8.3 40997 信息生命周期 react@16.8.3~postinstall: react@16.8.3 40998 愚蠢的安装后 react-dom@16.8.3 40999 信息生命周期 react-dom@16.8.3~postinstall: react-dom@16.8.3 41000 愚蠢的安装后 react-native@0.59.10 41001 信息生命周期 react-native@0.59.10~postinstall: react-native@0.59.10 41002 愚蠢的 postinstall react-native-gesture-handler@1.3.0 41003 信息生命周期 react-native-gesture-handler@1.3.0~postinstall: react-native-gesture-handler@1.3.0 41004 愚蠢的 postinstall react-native-paper@2.16.0 41005 信息生命周期 react-native-paper@2.16.0~postinstall: react-native-paper@2.16.0 41006 愚蠢的 postinstall react-native-reanimated@1.1.0 41007 信息生命周期 react-native-reanimated@1.1.0~postinstall: react-native-reanimated@1.1.0 41008 愚蠢的安装后 react-native-unimodules@0.5.4 41009 信息生命周期 react-native-unimodules@0.5.4~postinstall: react-native-unimodules@0.5.4 41010 详细生命周期 react-native-unimodules@0.5.4~postinstall:生命周期中的不安全烫发真 41011 详细生命周期 react-native-unimodules@0.5.4~postinstall: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/kj/Downloads/obey/node_modules /react-native-unimodules/node_modules/.bin:/Users/kj/Downloads/obey/node_modules/.bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/库/Apple/usr/bin:/Library/Apple/bin:/Users/kj/Library/android/sdk/emulator:/Users/kj/Library/Android/sdk/tools:/Users/kj/Library/Android/ sdk/tools/bin:/Users/kj/Library/Android/sdk/platform-tools 41012 详细生命周期 react-native-unimodules@0.5.4~postinstall: CWD: /Users/kj/Downloads/obey/node_modules/react-native-unimodules 41013 愚蠢的生命周期 react-native-unimodules@0.5.4~postinstall: Args: ['-c', 'node ./scripts/postinstall.js' ] 41014 愚蠢的生命周期 react-native-unimodules@0.5.4~postinstall:返回:代码:0 信号:null 41015 愚蠢的 postinstall react-native-video@5.0.0 41016 信息生命周期 react-native-video@5.0.0~postinstall: react-native-video@5.0.0 41017 愚蠢的 postinstall react-native-web@0.11.7 41018 信息生命周期 react-native-web@0.11.7~postinstall: react-native-web@0.11.7 41019 愚蠢的安装后 react-navigation@2.18.3 41020 信息生命周期 react-navigation@2.18.3~postinstall: react-navigation@2.18.3 41021 愚蠢的 postinstall react-test-renderer@16.8.3 41022 信息生命周期 react-test-renderer@16.8.3~postinstall: react-test-renderer@16.8.3 41023 愚蠢的安装后Sharp@0.23.3 41024 信息生命周期sharp@0.23.3~postinstall:sharp@0.23.3 41025 定时动作:postinstall 在 2042ms 内完成 41026 使用 /Users/kj/.npm/_locks/staging-32a5fd08273bf931.lock 为 /Users/kj/Downloads/obey/node_modules/.staging 完成详细解锁 41027 计时阶段:executeActions Completed in 40882ms 41028 计时阶段:rollbackFailedOptional 3ms内完成 41029 傻安装 runPostinstallTopLevelLifecycles 41030 愚蠢的构建服从@0.0.0 41031 信息链接东西服从@0.0.0 41032 愚蠢的链接东西服从@0.0.0 有 /Users/kj/Downloads 作为它的父 node_modules 41033 傻安装服从@0.0.0 41034 信息生命周期服从@0.0.0~安装:服从@0.0.0 41035 愚蠢的安装后服从@0.0.0 41036 信息生命周期服从@0.0.0~安装后:服从@0.0.0 41037 详细生命周期服从@0.0.0~postinstall:生命周期中的不安全烫发真 41038 冗长的生命周期服从@0.0.0~postinstall:路径:/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/kj/Downloads/obey/node_modules/.bin: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Apple/bin:/Users/kj/Library/Android/sdk/模拟器:/Users/kj/Library/Android/sdk/tools:/Users/kj/Library/Android/sdk/tools/bin:/Users/kj/Library/Android/sdk/platform-tools 41039 详细生命周期服从@0.0.0~postinstall:CWD:/Users/kj/Downloads/obey 41040 愚蠢的生命周期服从@0.0.0~postinstall:参数:['-c','jetify'] 41041 info 生命周期服从@0.0.0~postinstall: 无法执行 postinstall 脚本 41042 详细堆栈错误:服从@0.0.0 安装后:jetify 41042 详细堆栈生成 ENOENT 41042 ChildProcess 的详细堆栈。 (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:48:18) ChildProcess.emit (events.js:198:13) 处的 41042 详细堆栈 41042 详细堆栈在可能关闭(内部/child_process.js:982:16) 41042 Process.ChildProcess._handle.onexit 的详细堆栈(内部/child_process.js:259:5) 41043 详细的 pkgid 服从@0.0.0 41044 详细 cwd /Users/kj/Downloads/obey 41045 冗长的达尔文 19.0.0 41046 详细 argv “/usr/local/bin/node” “/usr/local/bin/npm” “安装” 41047 详细节点 v10.16.3 41048 详细的 npm v6.13.7 41049 错误代码 ELIFECYCLE 41050 错误系统调用产生 41051 错误文件 sh 41052 错误 errno ENOENT 41053 错误服从@0.0.0 安装后:jetify 41053 错误生成 ENOENT 41054 错误 在服从@0.0.0 安装后脚本失败。 41054 错误 这可能不是 npm 的问题。上面可能有额外的日志输出。 41055 详细退出 [1, true]

【问题讨论】:

尝试使用您的包管理器安装jetifier(即npm i jetifier)。也许在你的 Mac 上使用 Homebrew。 是的,非常感谢。我之前尝试过 npm install --save-dev jetifier 但它没有用。我不太明白其中的区别。 【参考方案1】:

这个错误是因为你没有在你的package.json 中安装jetifier 作为依赖项。从您的反馈中我可以看出您使用了

npm install --save-dev jetifier

这样做是将jetifier 安装为dev 依赖项。开发依赖项是一种在开发过程中使用包的方式,但会阻止它们在生产环境中使用。例如,我使用一个包mjml 为电子邮件构建html。我只用它来转译代码,它不是我网站的一部分,所以我用它作为开发依赖。

你需要做的是

npm install --save jetifier

(我自己从未真正使用过--save 部分)

这会将其保存为可以在生产中使用的依赖项。当您弹出应用程序时,它仅弹出生产依赖项,但您的文件之一 require'd jetifier。因此错误:)

【讨论】:

非常感谢我现在有了更好的理解

以上是关于将 Expo Project 弹出到 Bare React Native 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的应用程序从 expo 弹出到裸反应本机代码

Expo / React Native:弹出到裸工作流后找不到图像文件

弹出 React Native 项目时,Bare 和 ExpoKit 有啥区别?

Expo React Native Bare 发布 APK 在启动时立即崩溃

如何将 git bare repo HEAD 与其工作树位置进行比较

如何将 android 导航 backstack 弹出到某个片段?