在什么时候在 React Native 应用程序(使用 Expo)中编译 Native 模块?

At what point are Native Modules compiled in a React Native app (with Expo)?

底层原生模块是在从 NPM 安装时编译的,还是在应用 运行(即捆绑)时编译的?

我认为它们不太可能在从 NPM 安装时被编译,因为这需要您在安装时在您的计算机上安装适当的编译器(我没有)。 最重要的是,我找不到任何似乎是编译结果的文件。

但是,我不确定的原因是,对 Native 代码的更改似乎没有反映在最终的 React Native 应用程序中。

我正在尝试实现 NPM 包中缺少的功能,因此为了熟悉该包,我一直在修改本机代码。

不过,我可以随意更改,但这些更改在最终应用程序中似乎没有任何作用。

我什至从给定的包中完全删除了所有本机代码(androidios 文件夹),然后清除了我的缓存(在 Expo 捆绑器和世博会客户),但仍然没有任何反应;不知何故,应用程序似乎仍然忽略了本应是明显错误的内容(即丢失文件)。

这与我使用 Expo 有关系吗?更改是否被忽略,因为代码是从某处的缓存中读取的? 我是不是从根本上误解了什么?

如有任何帮助,我们将不胜感激。

P.s。我的最终目标是能够修改上述 NPM 包,所以如果不能直接修改 Native Module,有人能告诉我正确的做法吗?谢谢

对于那些可能处于类似情况的人来说,除非您弹出您的应用程序或使用 vanilla React Native,否则您似乎无法使用 Expo 修改 Native 代码。

据我所知,这是因为 每个 与 Expo 兼容的本机模块都与 Expo 预先捆绑在一起(这包括 Expo 团队制作的模块以及其他人制作但 Expo 团队包括的模块)。

这意味着,除非您能让与 Expo 兼容的本机模块的维护者发布新版本的包并应用您的更改,否则 Expo 不会 选择进行自定义更改。

即使那样我也不能保证它会工作,因为我不知道 Expo 的每个版本是否仅限于它在发布时包含的 Native 模块的版本。

如果您需要更多信息,最好尝试在社交媒体或 Expo 论坛上联系其中一位 Expo 开发人员。

这里有一些额外的链接。他们最终可能会死去,但无论如何我都会包括他们: