react-native - 什么是 native 链接?

标签 react-native react-native-android

What is the purpose of the react-native link command?

最佳答案

Note: from React-Native 0.60.0 linking packages using react-native link has become redundant. Autolink has been added to the React-Native CLI which means that iOS will now use cocoapods and Android will use gradle. You can read more about Autolinking here.



什么是react-native link ?
react-native link是安装 native 依赖项的自动方式。它是手动链接项目中依赖项的替代方法。它适用于 Android 和 iOS。

手动链接项目时,大部分步骤是相同的​​,因此使用 react-native link允许您轻松安装 native 依赖项,​​而无需重复键入类似的代码或执行类似的操作。

但是需要注意的是运行react-native link并不总是完全链接一个包,有时需要额外的步骤和你 应该检查仔细阅读安装说明。

在安装依赖项并链接它之前,请务必仔细阅读说明。

iOS注意事项

如果您的项目正在使用 CocoaPods 并且您正在链接的依赖项具有 .podspec然后当你使用 run react-native link它会更新您的 Podfile .这不是将文件直接添加到您的 Xcode 项目中。您还必须运行 pod install在您的 ios 内目录,否则将不会完全安装 native 依赖项。

有时安装使用 CocoaPods可能会导致更多问题,并不是每个依赖都需要安装 CocoaPods您始终可以按照我在此 SO answer 中概述的步骤进行操作停止react-native linkPodfile 添加依赖项,这并不理想,但它是一种解决方法。某些依赖项需要添加到 Podfile ,所以你应该只在依赖不需要时才这样做 pods运行。
react-native linkreact-native link dependency-name
你应该使用 react-native link链接任何依赖项时,或者您应该更明确地使用 react-native link dependency-name ?

根据我的经验,最好使用 react-native link dependency-name .这是因为 react-native link将尝试链接(或重新链接)所有可以链接的依赖项,这可能导致代码重复。我遇到的大多数问题都是在链接 Android native 依赖项时。我认为在随后的更新中阻止这种情况发生已经取得了一些进展,但古老的格言在这里适用,一次被咬,两次害羞

链接良好实践

使用时 react-native link dependency-name你应该遵循良好的习惯,这样你就不会被蜇伤。有时,您尝试的依赖项不会按预期工作,并且删除在链接过程中添加的所有代码可能很棘手。 (如果您不熟悉 Xcode 项目文件可能是一场噩梦)。

这就是我安装依赖项然后链接它们的方式。
  • 确保您使用的是版本控制,例如 git .
  • 确保您的代码完全提交,没有未保存的更改。
  • 创建一个新分支,并检查它。
  • 安装您的依赖项 npm i dependency-name
  • 然后链接你的依赖 react-native link dependency-name
  • 执行依赖项所需的任何其他安装步骤。请参阅依赖项的安装说明。
  • 检查您的代码是否适用于新的依赖项。
  • commmit更改并合并分支。


  • 手动链接

    如果您更喜欢手动链接您的本地依赖项,那么您应该按照依赖项网站上的说明进行操作,或者您可以查看 react-native 提供的文档。

    目前只有关于如何手动链接的说明iOS项目。

    手动链接 Android要求您在以下位置进行更改:
  • settings.gradle
  • app/build.gradle
  • MainApplication.java

  • 对于您应该进行的确切更改,您应该查看依赖项的手动链接说明。

    我必须链接吗?

    这取决于您使用的依赖项,某些依赖项仅使用用 Javascript 编写的代码,因此不需要链接它们,并且运行 react-native link dependency-name 没有任何好处。 .

    但是,如果依赖项包含 native 代码 那么你将不得不链接。手动或使用 react-native link dependency-name .

    如何判断是否需要链接依赖项?

    首先,您需要检查网站、github 存储库或 npmjs.com 页面的依赖项。在安装依赖项后,通常会有说明告诉您是否链接依赖项。

    如果您找不到有关链接的任何说明,则您(可能)不需要链接它。

    如果您仍然不确定,请咨询依赖项维护者。

    我可以只运行链接吗?

    是的,如果没有任何链接,你可以它不会做任何事情。但始终使用 react-native link dependency-name 运行它以避免问题。

    我什么时候运行链接?

    您只能在安装依赖项后运行它。我建议您在安装依赖项后立即运行它。然后,在安装任何新的依赖项之前,您应该检查以确保它可以正常工作,以便您可以轻松调试。

    您不需要为每个依赖项多次运行它。

    无论您制作多少个组件或对 javascript 代码进行更改都不会影响链接,因为链接是纯原生的,而组件是 javascript。

    什么是自动链接?

    自动链接是添加到 react-native-cli 中的一项新功能。 .您可以阅读有关自动链接的更多信息 here .
    Autolink替换 react-native-link

    Autolinking is a mechanism built into CLI that allows adding a dependency with native components for React Native to be as simple as:

    yarn add react-native-webview

    Autolinking is a replacement for react-native link that brings new features (such as ability to easily integrate native dependencies on iOS) and fixes some of the long-standing issues.



    一旦它完全实现,它应该可以更容易地将带有 native 代码的依赖项添加到您的项目中。

    关于react-native - 什么是 native 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49874385/

    相关文章:

    javascript - YouTube API 返回的数据似乎是不可变的?

    javascript - fetch() 为每次调用注入(inject)查询变量/ header 值

    button - react native : onPress: How can I toggle the button text and function call?

    android - 找不到 androidx.appcompat :appcompat:28. 0.0

    syntax-error - 在rootSaga在watchSec上在rootSaga上未捕获

    java - 如何重构要从 React Native 调用的原生 Android Java 方法?

    ios - style fontWeight 和 fontStyle react-native 不能一起工作

    ios - iOS 不支持撒马尔罕字体

    React-native run-android 卡在 99% appDebug

    react-native - 在 Kotlin 中编写 react 原生 android 模块?