React-native: Le️精益核心

创建于 2019-02-06  ·  196评论  ·  资料来源: facebook/react-native

在过去的几个月中,我们一直在讨论一个名为“精益核心”的项目并取得进展。 请阅读我们对该项目的动机。 多年来,React Native已经积累了许多已经过时,未使用或以其他方式保留的零件。 现在该清理所有内容并将存储库置于更易于管理的状态了。

这是一项总括性任务,旨在跟踪实现精简核心目标所需的所有工作,包括围绕存储库重组的工作。 此问题一直处于最新状态,因此将添加新项目,并将已完成的项目(移出)删除。 其中一些项目会产生单独的问题以跟踪工作。 如果您没有为以下任何一项分配名称,并且希望提供帮助,请在评论中提供自愿信息,并与我联系以开始使用!

组件和运行时

React Native当前带有大量组件,其中许多组件已被弃用或过时,但它们仍然是存储库的一部分,并增加了应用程序的大小。 对于本节中的项目,如果它们未使用,我们正在寻求将其完全删除,或者我们希望将其移动到社区管理的存储库中,或者移动到facebookarchive中。 这里的列表部分基于@ axe-fbhttps :

  • []删除ImageStore(@cpojer)
  • []删除PushNotificationIOS(@cpojer)
  • []删除AsyncStorage(@cpojer)
  • []删除滑块(@cpojer)
  • []删除ProgressBarAndroid(@cpojer)
  • []删除ProgressViewIOS(@cpojer)
  • []删除MaskedViewIOS(@cpojer)
  • []删除ActionSheetIOS(@cpojer)
  • []删除ImagePickerIOS(@cpojer)
  • []删除Picker和PickerIOS(@cpojer)
  • []删除DatePickerAndroid,DatePickerIOS(@cpojer)
  • []删除ReactART(@cpojer)

第三方依赖

多年来,我们已经积累了大量的依赖关系,尤其是JavaScript。 我们还把东西从React Native移出了,例如Metroreact-native-cli 。 这意味着我们在package.json中留下了大量工具依赖项,其中许多将由RN本身未使用,并且不会更新为最新版本,从而导致React Native的完整安装变得肿。 对所有使用的依赖项进行审核并确定可以删除哪些依赖项也将是一件很棒的事情。

  • JavaScript依赖关系

    • []检查哪些依赖项较大,以及是否可以减小它们

    • []确定哪些依赖项可以升级到其最新版本以进行安全修复

    • []找出可以删除较小的安装大小的依赖项(=减少版本不匹配)

  • 将React Native代码移动到外部依赖项

    • []确定第三方程序包可以更好地提供哪种JavaScript代码,而不是维护副本或我们自己的实现

储存库结构

现在,React Native存储库是一个大型存储库,几乎没有组织,可以促进关注点分离。 作为此工作的一部分,我们的目标是将事物转移到更易于管理的结构中。 作为此过程的一部分,我们希望遵循由多个较小的程序包组成的monorepo模型。 这将是一个逐步的迁移,我们将仅跟踪初始工作以将其付诸实践。

  • []提供一个与现有存储库一起使用的初始设置,具有多个软件包,并且还可以与Facebook的内部设置很好地配合使用(@cpojer)
  • []待办事项:确定这方面需要做的更多工作

完成的工作


单击以查看此问题创建之前的先前工作

Good first issue Help Wanted Ran Commands Discussion

最有用的评论

我想快速介绍一下每个人在精益核心工作方面所取得的进展。 我只想说一周多的时间里,您的所有贡献使我为之震惊。 非常感谢!

这是所有已经完成的工作:

  • NetInfo(https://github.com/react-native-community/react-native-netinfo)已成功拆分出来,并由@ matt-oakes通过@ react-native-community / netinfo在npm上发布,后者甚至添加了新测试以及该模块的新功能!
  • 通过@ferrannp成功拆分了ViewPagerIOS(https://github.com/react-native-community/react-native-viewpager/pull/1)。
  • @Krizzu撤消了AsyncStorage(https://github.com/react-native-community/react-native-async-storage)。
  • @dmtrKovalenko将StatusBar(https://github.com/react-native-community/react-native-statusbar/pull/1)移到单独的存储库中。
  • 滑块(https://github.com/react-native-community/react-native-slider/pull/1)由@michalchudziak拆分。
  • @FonDorn将MaskedViewIOS(https://github.com/react-native-community/react-native-masked-view/pull/1)变成了社区回购协议。
  • PushNotificationIOS(https://github.com/react-native-community/react-native-push-notification-ios/pull/1)由@rafaellincoln提取。
  • @Trancever提取了ImageEditor(https://github.com/react-native-community/react-native-image-editor/pull/1)。
  • @EvanBacon在#23330中为
  • @wellmonge在#23318中合并了AlertIOS和Alert。
  • Callstack工程师发布了新版React Native CLI的第一个版本: https :

我还想强调一下提取这些模块如何能够更好地维护那些模块,即@ matt-oakes为NetInfo添加了测试(https://github.com/react-native-community/react-native-netinfo/pull/ 4)和@ifsnow将流类型添加到AsyncStorage(https://github.com/react-native-community/react-native-async-storage/pull/4)。 通过将这些组件与React Native(和Facebook)解耦,它们可以单独移动得更快,而不会被Facebook员工阻止。 此外,因为我们可以从React Native存储库中迁移现有问题和Pull Request,所以它也将使维护React Native本身变得更加容易,并且我们将能够更快地响应Pull Request!

这是我们正在努力或下一步要进行的工作:

  • 删除VisationIOS
  • 删除未使用的第三方依赖项
  • 开始迁移Facebook内部代码以使用新的react-native-community软件包

再次,对于到目前为止一直在帮助的每个人,谢谢!

所有196条评论

@cpojer我想删除SnapshotViewIOS🔪

@cpojer ,谢谢你把它们放在一起!

从移动AsyncStorage开始,我愿意解决一些问题。

我很乐意将NetInfo移至社区仓库。

最好先创建一个个人的Github存储库,然后在准备就绪后将其潜在地迁移到react-native-community组织,还是我们应该立即从该组织中的存储库开始?

@cpojer ,我想为其中一些问题提供帮助,我可以从“将AlertIOS与Alert合并”开始吗?

棒极了! 我把你的名字放在上面的项目旁边。

@jdmunro您可以发送公关并将其分配给我吗? 然后,我可以接管它,并在着陆之前删除FB专用的东西。
我创建了@Krizzu和@ matt-oakes https://github.com/react-native-community/react-native-async-storagehttps://github.com/react-native-community/react-native-netinfo让您发送PR以及使它们成为第三方模块所需的所有代码。 理想情况下,在第一步中,您只需从RN存储库中获取代码,然后将它们放在单独的存储库中即可。 为了确保它能正常工作,我们可以将它们作为依赖项链接回RN,并删除原始实现。 再往下走,我们实际上可以将其移动到可选包中。
@wellmonge听起来很棒! 我不确定要完成什么工作,但也许您可以检查两个模块,看看是否可以将它们统一?

@cpojer我可以帮助移动滑块🙂

之后,如果您仍然需要帮助,我可以代劳

@michalchudziak太棒了! 我创建了https://github.com/react-native-community/react-native-slider ,请参阅上面有关下一步操作的评论。

作为package.json中项目的名称,请使用@react-native-community/<project name> ,即。 @react-native-community/slider

@cpojer我可以拿ViewPagerAndroid 。 我认为将其移至社区存储库(如果可以为我创建存储库,thx better)比仅删除它更好,因为周围的其他软件包已在iOS的JS上实现了此行为,并在Android的本地软件包上进行了中继。

@cpojer我想通过合并和移动Picker和PickerIos来提供帮助。 :)

@ferrannp为您创建了https://github.com/react-native-community/react-native-viewpager ! 请参阅上面的消息。
@jainkuniya谢谢! 不完全确定会是什么样子,但也许您可以看到如何统一它们并开始发送小型PR来响应本机的问题。

棒极了! 我把你的名字放在上面的项目旁边。

@jdmunro您可以发送公关并将其分配给我吗? 然后,我可以接管它,并在着陆之前删除FB专用的东西。
我创建了@Krizzu和@ matt-oakes https://github.com/react-native-community/react-native-async-storagehttps://github.com/react-native-community/react-native-netinfo让您发送PR以及使它们成为第三方模块所需的所有代码。 理想情况下,在第一步中,您只需从RN存储库中获取代码,然后将它们放在单独的存储库中即可。 为了确保它能正常工作,我们可以将它们作为依赖项链接回RN,并删除原始实现。 再往下走,我们实际上可以将其移动到可选包中。
@wellmonge听起来很棒! 我不确定要完成什么工作,但也许您可以检查两个模块,看看是否可以将它们统一?

当然! 我会做的,然后向您报告。

可以帮助StatusBarIOS和PushNotificationIOS

@cpojer您是否偏爱Android软件包名称?

以NetInfo为例,当前com.facebook.react.modules.netinfo 。 我们是否应该使用com.reactnativecommunity.modules.netinfo类使其在所有提取的模块中成为标准配置?

我可以帮忙吗

  • 将SegmentedControlIOS移至社区仓库
  • 将ProgressViewIOS移至社区仓库

请勾选该复选框。


感谢您提交问题。 您能否再看一下您的描述并确保问题模板已完整填写?

if如果您想再次查看错误报告问题模板,请单击此处。

@dmtrKovalenko让您https://github.com/react-native-community/react-native-statusbar
包名称中的@ matt-oakes社区听起来不错,但是如果我们保留现有名称,我也可以。
@kdenz为SegmentedControlIOS创建了https://github.com/react-native-community/react-native-segmented-control
@vonovak为复选框回购创建了https://github.com/react-native-community/react-native-checkbox

只是总结一下我们应该为提取而采取的粗略步骤:

  1. 将您正在处理的模块的当前版本及其所有依赖项提取到单独的git存储库中,然后将PR发送到为您在RN社区中创建的模块。 有关包含本地代码的工作方式的示例,请参见react-native-webview
  2. 使用已经存在的warnOnce模块向React Native添加弃用警告,有关示例,请参见react-native-implementation.js
  3. 然后,我们将关闭所有问题/ PR,并指导人们使用新创建的项目和存储库。
  4. 一两个版本发布后,我们将完全从React Native中删除代码,这时只有外部模块可以工作。
  5. 或者,我们可以尝试一种方法,该方法将立即从RN存储库中删除代码,但是将新的社区存储库添加为对React Native的依赖,并保持现有API的工作方式。 我不确定这是否适用于具有本机依赖性的模块。

请让我知道,如果你有任何问题 :)

  • 将ImageStore移至社区仓库

我认为我们应该弃用此方法,而应使用任何现有的FileSystem解决方案。 核心用例是从映像获取Base64。 它还没有android支持。

嘿@cpojer! 我会帮助

  • 删除MaskedViewIOS并可能移至社区仓库

我想帮忙!
我可以继续工作吗

  • 从存储库中删除ProgressBarAndroid,可能移至社区存储库

嘿@cpojer! 我可以帮忙吗

  • 将ActionSheetIOS本机代码移至expo。

@cpojer我很乐意提供帮助,请为我注册Libraries / CameraRoll(ImagePickerIOS和CameraRoll组件)

RNTester应用程序没有自己的package.json,因此我们删除的所有组件都必须从RNTester应用程序中删除,或者需要作为依赖项保留在核心中。 对于RNTester,这种减肥方法是什么?

@cpojer我可以帮助将剪贴板移至社区回购:)

我可以帮忙吗? @cpojer

  • 将Picker移至社区仓库。

@jainkuniya也许我们可以一起工作?

@zhaozhiming可以肯定的是,我正在计划先将其合并到RN回购本身,然后再移至社区回购。

有趣的。 RNTester会发生什么? 我希望我们可以将其与所有组件一起使用。

我可以帮助的@cpojer

  • 将“共享”移至社区回购

另外,拥有某种协调的模板也将非常有帮助,因此存在本机代码作为lib,这是开发和贡献代码的简便方法。

@pvinis也许看看我正在处理的NetInfo存储库中的提交:

https://github.com/matt-oakes/react-native-netinfo/tree/83e96b30fda1c18f62d27ec0db61db7f56eddc1f

尚无NetInfo代码,但它具有库的Android和iOS部分以及无需链接package.json即可链接的示例项目。

我现在正计划移入NetInfo代码,然后将RNTester示例移至example项目中。

@EvanBacon听起来不错。 您是否要注册以向RN添加警告以弃用ImageStore并推荐第三方解决方案?

@ matt-oakes已经在NetInfo方面做得很好,这是所有提取的镜像模型: https :

@pvinis就像@ matt-oakes所说,每个项目都应该有自己的示例和测试代码。 我认为一旦完成,我们可以考虑创建一个RNTester示例,该示例可以提取所有最常用的提取模块并将它们组合到单个应用程序中。

VirtualizedList停留了,对不对? 我以前在列表中看到过它,但现在不再看到了。

@cpojer我可以照顾一下将ImageEditor移到单独的存储库中。

@cpojer,我很乐意从事这一工作

  • 识别package.json中所有未在React Native中直接使用的依赖项

@ matt-oakes您打算如何测试或帮助开发此lib? 我们需要一个包含lib的项目,该项目可以轻松地进行更新/处置和重新创建。

这样,其他人就可以很容易地做出贡献。 它可能是一个“示例”应用程序,但在我看来,“示例”应用程序用于显示如何使用库,而“开发”应用程序将是可以开发,测试库的地方。

有什么想法吗?

@brunolemos是的,很抱歉我一开始将其放入其中的错误。

@Trancever我创建了https://github.com/react-native-community/react-native-image-editor,供您发送PR!
@ nimish-gupta太棒了! 您可以进行分析并创建一个单独的问题来讨论未使用的依赖项吗? 或以其他方式发送请求请求,并明确说明为什么可以将其删除(例如,找不到它们等)。
@pvinis,我们目前正在讨论创建脚手架是否有意义。 直到我们有了为止,您的工作基于https://github.com/react-native-community/react-native-webviewhttps://github.com/react-native-community/react-native中的结构

@cpojer为PickerIOS和选择器项目,我打算去以下步骤:

  • PickerIOS添加warning ,它已被弃用,在以后的发行版中将被删除。
  • 发布后,从RN删除PickerIOS RN

同时,我们可以将Picker移至社区存储库。

有什么建议吗?

@jainkuniya我认为这个主意不错,但请记住,Picker在后台使用PickerIOS。 我认为最好是我们可以摆脱PickerAndroid和PickerIOS而只公开Picker,您怎么看? 许多其他组件已经以这种方式工作。

为了让人们对我移动NetInfo代码所经历的过程有所了解:

1)使用create-react-native-library生成支架: npx react-native-create-library --platforms ios,android --package-identifier com.reactnativecommunity.netinfo --prefix RNC --license MIT netinfo
2)通过在新库项目的根目录中运行react-native init NetInfoExample创建一个示例项目。 然后,我将创建的文件夹重命名为example
3)删除example/package.json并将依赖项和脚本移动到根package.json 。 我还将其他一些生成的文件(如babel.config.js移到了项目的根目录中。
4)更新了示例Android gradle文件和Xcode项目中对React Native库的引用。 查找并替换../node_modules/react-native并用../../node_modules/react-native替换就足够了。
5)将MainApplication.javaAppDelegate.m主模块名称的路径从indexexample/index
6)添加了babel-plugin-module-resolver模块,并babel.config.js 。 这允许您以与用户相同的方式导入库代码。
7)手动将库项目与示例一链接。 这与您通常的做法非常相似,但是settings.gradle在Android上的路径将只是../../android像这样)。
8)然后,我移动了本机代码文件,并使用RNC (反应本机社区)前缀而不是旧的RCT重命名了它们。 我将Javascript代码放在js并在package.json更改了索引路径。
9)然后,我将示例从RNTester移到example项目中,并整理了一下代码。 随意获取example/index.js文件,作为包含从RNTester复制过来的示例的一种方式。 就像RNTester最初那样,它只是一个轻巧的包装器。
10)我整理了一下项目,使其与react-native-webview的设置方式匹配。 主要更改围绕Android gradle文件进行。

希望能对人们有所帮助:)

@pvinis我认为向人们展示如何使用该库与帮助开发之间有很多交叉,尤其是在表面积很小的情况下,例如与NetInfo一样。 项目中的example几乎同时满足了这两个目的。

对于自动化测试,我尚未对其进行全面研究,但是,我之前曾使用Jet (基于Detox并由react-native-firebase )进行react-native-的端到端测试。

惊人的。 几天前,当我尝试将某些应用程序功能提取到lib中时,我执行了相同的过程。 我没有执行package.json删除和其他几个小步骤。 我将尝试检查您所做的一切以及我所做的一切,看看是否还有不清楚的事情。

感谢您的详细信息。 :)

@cpojer SnapshotViewIOS似乎也在内部用于某些iOS集成测试。 仅当您链接到RCTTest本机模块时才可用。 用法在这里: https :

我们是否只是从公共RN导出中删除SnapshotViewIOS ,即它仍应可以私下用于测试用途?

关于如何保留要导入的文件的历史记录进行了一些讨论。 我发现该指南非常有用,并允许我对NetInfo模块进行操作:

https://stosb.com/blog/retaining-history-when-moving-files-across-repositories-in-git/

作为摘要,您首先需要找出需要复制哪些文件。 然后,您将创建一个脚本,如下所示:

#!/bin/bash

mkdir -p combined/

# Pipe output to silence "file not found" warnings.
mv ReactAndroid/src/main/java/com/facebook/react/modules/netinfo/NetInfoModule.java combined/ 2>/dev/null
mv Libraries/Network/RCTNetInfo.h combined/ 2>/dev/null
mv Libraries/Network/RCTNetInfo.m combined/ 2>/dev/null
mv Libraries/Network/NetInfo.js combined/ 2>/dev/null

true

您应该将此文件放在存储库之外的某个位置。

然后,您需要运行以下命令:

git fetch origin --unshallow
git checkout -b history
git filter-branch -f --prune-empty --tree-filter ~/treefilter.sh @
git filter-branch --prune-empty -f --subdirectory-filter combined

第一个filter-branch命令将花费一些时间,并将使用该脚本将您感兴趣的所有文件移动到单个文件夹中。 第二个命令应该相当快,并将文件从新文件夹移动到根目录,然后仅保留更改您要保留的任何文件的提交。

然后,您可以得到这样的历史记录: https :

嗨, @cpojer我很想工作

  • 将ProgressViewIOS移至社区仓库

谢谢

请注意有关提取polyfill的信息:

从回购中取出提取polyfill,如果可能,直接重新使用whatwg-fetch

我们不得不分叉它,因为我们的Blob模块不是标准的,并且不会自动释放其资源。 使用新的本机模块系统应该更容易实现自动资源清除,但是在此之前,我们应该保留分叉的polyfill。

@cpojer当前,将“共享”移至社区存储库指向的是另一个存储库,该存储库具有比react-native内部共享丰富的功能集。 所以我想有一个新的名称为react-native-simple-share或类似名称的存储库。

请查看此分支(一旦获得新的社区回购,我将删除此回购)

请注意有关提取polyfill的信息:

从回购中取出提取polyfill,如果可能,直接重新使用whatwg-fetch

我们不得不分叉它,因为我们的Blob模块不是标准的,并且不会自动释放其资源。 使用新的本机模块系统应该更容易实现自动资源清除,但是在此之前,我们应该保留分叉的polyfill。

由于我需要AbortController.Signal支持,因此我正在寻找对分叉的polyfill进行更新。 这是否适合内核内部提取polyfill的未来?

@cpojer我想在PushNotificationIOS上工作。

@cpojer我可以帮忙

  • 将ImageEditor移至社区仓库

谢谢!

@ nicholaslee119为您创建了https://github.com/react-native-community/react-native-progress-view 。 查看上面有关如何取得进展的评论。
@Ansalibrahim好点。 为您创建了https://github.com/react-native-community/react-native-simple-share 。 请在那里发送公关!
@rafaellincoln创建了https://github.com/react-native-community/react-native-push-notification-ios,供您使用。
@dratwas @Trancever已经在使用它,请与他合作为其创建存储库。
@ Jyrno42我们可以升级到支持我们需要的所有东西的第三方

@cpojer对不起,我没有看到@Trancever
如果尚未提取Move ImageStore to a community repo我可以收取Move ImagePickerIOS to a community repo

有人可以告诉我为什么要删除AsycnStorage和PushNotificationIOS吗? 我认为它们都被很多应用程序使用,所以也许我们可以将它们移到社区,而不仅仅是删除它们?

特别是PushNoticationIos被很多人使用。 我正在使用正在使用PushNotificationIos的https://github.com/zo0r/react-native-push-notification 。 有我不知道的更好的替代方法吗?

@vdlindenmark AsyncStorage不会被删除,而是移至社区

我想带皮克!!!

如果Move ImagePickerIOS to a community repo尚未被使用,我很乐意帮忙😄

@cpojer我已提交#23359以合并PickerIOSPicker 。 请查阅 :)。

此问题应固定📌

@dratwas对不起,我很困惑。 实际上,我们完全不推荐使用ImageStore因为@EvanBacon指出了已经提供了第三方选项。 您想自愿参加另一个模块吗?
@vdlindenmark就像@Krizzu指出的那样,这两个模块都将
@Keraito我创建了https://github.com/react-native-community/react-native-image-picker-ios,供您向其发送PR。
@andersonaddo完成了! 谢谢你的建议。

@cpojer我想知道你们是否也已经评估了将AccessibilityInfo移至社区存储库的可能性。

我不知道它是否可以脱离核心,但我看到增加对React-Native的可访问性支持的好处。

已经有一些建议增加对视图层的可访问性支持并使其更跨平台(https://github.com/react-native-community/discussions-and-proposals/pull/56,https:// github.com/react-native-community/discussions-and-proposals/pull/55,https://github.com/react-native-community/discussions-and-proposals/pull/54),但RN却没有目前尚无法提供,也没有任何问题或建议,是对某些用户在操作系统级别上的偏好的访问。 例如:没有办法获得“减少运动”选项,通过减少/关闭动画来适应应用程序是必需的。

我认为UIAccessibility在iOS上提供的那些选项(我不知道Android上的等效选项)可以从AccessibilityInfo

拥有社区回购协议可能会为该特定问题吸引更多的捐助。

谢谢你。

@cpojer我看不到任何未分配的模块,因此如果可以帮助我,我将与@Trancever交谈:

  • 将ImageEditor移至社区仓库

@elucaswork可访问性非常重要,我相信它必须是React Native本身的一部分。 我们应该竭尽所能来改善React Native中的可访问性支持。
@dratwas听起来不错!

  • 将Picker移至社区仓库。

@cpojer我可以开始这个问题吗?

RN目前尚不提供的任何功能,也没有任何问题或建议,是在操作系统级别上访问某些用户的所有首选项。 例如:没有办法获得“减少运动”选项,通过减少/关闭动画来适应应用程序是必需的。

我认为UIAccessibility在iOS上提供的那些选项(我不知道Android上的等效选项)可以从AccessibilityInfo

我只是在想知道如何在React Native中读取“减少运动”选项,但似乎尚未实现。

进行功能请求并获得可见性的最佳方法是什么? https://react-native.canny.io/feature-requests仍然是功能请求的首选论坛吗?

VibrationIOS应该怎么做? 自2016Vibration 。 似乎很容易删除。

@hramos很棒的建议! 我要去掉那个。

@cpojer我注意到Picker / PickerIOS没有分配给任何人。 如果可能的话,我也想研究它。

嗨, @ rafaellincoln ,关于选择器,我想我们计划首先将其合并到RN repo本身,然后再将其移至社区repo。 对于合并,我已经提交了PR#23359

我想快速介绍一下每个人在精益核心工作方面所取得的进展。 我只想说一周多的时间里,您的所有贡献使我为之震惊。 非常感谢!

这是所有已经完成的工作:

  • NetInfo(https://github.com/react-native-community/react-native-netinfo)已成功拆分出来,并由@ matt-oakes通过@ react-native-community / netinfo在npm上发布,后者甚至添加了新测试以及该模块的新功能!
  • 通过@ferrannp成功拆分了ViewPagerIOS(https://github.com/react-native-community/react-native-viewpager/pull/1)。
  • @Krizzu撤消了AsyncStorage(https://github.com/react-native-community/react-native-async-storage)。
  • @dmtrKovalenko将StatusBar(https://github.com/react-native-community/react-native-statusbar/pull/1)移到单独的存储库中。
  • 滑块(https://github.com/react-native-community/react-native-slider/pull/1)由@michalchudziak拆分。
  • @FonDorn将MaskedViewIOS(https://github.com/react-native-community/react-native-masked-view/pull/1)变成了社区回购协议。
  • PushNotificationIOS(https://github.com/react-native-community/react-native-push-notification-ios/pull/1)由@rafaellincoln提取。
  • @Trancever提取了ImageEditor(https://github.com/react-native-community/react-native-image-editor/pull/1)。
  • @EvanBacon在#23330中为
  • @wellmonge在#23318中合并了AlertIOS和Alert。
  • Callstack工程师发布了新版React Native CLI的第一个版本: https :

我还想强调一下提取这些模块如何能够更好地维护那些模块,即@ matt-oakes为NetInfo添加了测试(https://github.com/react-native-community/react-native-netinfo/pull/ 4)和@ifsnow将流类型添加到AsyncStorage(https://github.com/react-native-community/react-native-async-storage/pull/4)。 通过将这些组件与React Native(和Facebook)解耦,它们可以单独移动得更快,而不会被Facebook员工阻止。 此外,因为我们可以从React Native存储库中迁移现有问题和Pull Request,所以它也将使维护React Native本身变得更加容易,并且我们将能够更快地响应Pull Request!

这是我们正在努力或下一步要进行的工作:

  • 删除VisationIOS
  • 删除未使用的第三方依赖项
  • 开始迁移Facebook内部代码以使用新的react-native-community软件包

再次,对于到目前为止一直在帮助的每个人,谢谢!

@cpojer

  • 删除未使用的依赖项
  • 识别package.json中所有未在React Native中直接使用的依赖项

使用PR#23428和#23467完成上述任务

@cpojer

  • 删除SwipeableList

在#23484中解决的问题,如果愿意,也可以删除ListView。

FWIW,CameraRoll依赖于ListView。 也许先将其移出对删除ListView很有用。

FWIW,CameraRoll依赖于ListView。 也许先将其移出对删除ListView很有用。

RNTester中的CameraRollView文件似乎是在ReactNative中使用ListView的唯一内容。 也许PR可以将其交换为FlatList来打破这种依赖关系。 我很乐意接受,如果发生在将CameraRoll完全拉出之前

与其他版本相比,要增加大小是一个关键点,所以在react native 0.58.4中有没有办法减小大小,仅一页就花了18MB
以下是我的依赖
"react": "16.6.3", "react-native": "0.58.4", "react-native-elements": "^1.0.0", "react-native-gesture-handler": "^1.0.15", "react-native-vector-icons": "^6.3.0", "react-navigation": "^3.2.3"

我看到navigatorIos已从rn 0.59中删除。 我想知道是否已经有一个社区软件包? @cpojer

@cpojer如果有人还没有开始从事这一工作,我可以从事这一工作

  • 从回购中取出提取polyfill,如果可能,直接重新使用whatwg-fetch

@ nimish-gupta试试看! 可能会有一些陷阱,但是我们可以在PR上进行讨论,看看进展如何。 这样做可能不可行,但是让我们尝试看看我们能走多远。

@cpojer我想知道KeyboardAvoidingView是否足够有用以保留在内核中。
你们是否考虑过删除它,以便为更健壮的解决方案留出空间,例如https://github.com/APSL/react-native-keyboard-aware-scroll-view ,或者保留在核心位置非常有用?

@elucaswork实际上,我们在FB上

伟大的工作在这里。 但是,我试图使用NetInfo和AsyncStorage,似乎它们缺少podspec文件。 @cpojer我认为我们很多人都使用

伟大的工作在这里。 但是,我试图使用NetInfo和AsyncStorage,似乎它们缺少podspec文件。 @cpojer我认为我们很多人都使用

看起来这些在React Native播客文件中具有子规范,可能需要将其添加到新存储库中: https :

@syaau @TheSavior好地方。 我已经打开了一个PR,以便将Podspec添加到新的NetInfo存储库中:

https://github.com/react-native-community/react-native-netinfo/pull/17

在我的经验中, @ cpojer KeyboardAvoidingView真是片状,也许这是一个很好的机会,如果它能保持核心地位的话,可以改进它?

我想建议我们弃用ART ,而建议使用react-native-svg

@justDanielMata是的,我绝对认为如果它保持核心,就应该对其进行改进,但是应该在其他讨论中进行处理。
@EvanBacon我将与团队讨论此事,并再次与您联系。

从RN仓库中删除WebView

我很高兴接受这个

不幸的是, @ ericlewis只能从FB的角度进行操作,因为我们仍然在内部依赖它。

NavigatorIos已从react-native删除, @cpojer您可以在react-native-community下为其创建一个存储库吗? 如果可以的话,我想将其还原

我在这里有一个工作版本
https://github.com/michaelknoch/react-native-navigator-ios

@sijad (仅供参考:我尚未修复任何中断的流类型导入)

@sijad我们只想将仍建议使用的组件放入react-native-community 。 作为Lean Core的一部分,我们从React Native移出的组件都是可以在您的应用程序中使用的优良组件。 NavigatorIOS不是我们希望人们继续使用的东西,因为我们建议其他导航解决方案。 但是, @ michaelknoch似乎将它保留在他身上,所以我建议您使用该版本,直到您可以使用其他版本为止。

但是为什么不建议您使用navigatorios? 您是否认为基于JS的导航(fe react-navigation)的性能足够快,以至于本机导航不再是必需的?
@cpojer

@cpojer您好,刚刚为ProgressViewIOS创建了PR:) https://github.com/react-native-community/react-native-progress-view/pull/1

相反, @ michaelknoch ,我们绝对建议您使用本机导航解决方案。 碰巧NavigatorIOS是我们不再在Facebook上使用的旧版导航系统。 现在,我们在Facebook使用我们自己的自定义本机导航系统,很遗憾,该系统不是开源的。 我们建议人们使用https://github.com/wix/react-native-navigation。
@kdenz很棒,我来看看!

@cpojer刚刚完成迁移和总结SegmentedControlIos,并添加了一个示例应用程序。

  • 测试了组件,并且在新的RN项目中一切正常。
  • 发布到npm

@cpojer完成了将Clipboard-Api从RN内核转换到社区版本的操作,并添加了一个示例应用程序来测试所有内容。

  • 测试了组件,并且在新的RN项目中一切正常。
  • 发布到npm

@cpojer我最近开始使用本机响应,但是我可以尝试

  • 将本机“ TestModule”移动到RNTester

如果尚未解决!

@cpojer吐司组件怎么样? 我认为现在应该不推荐使用,以后再删除它。
原因:

  1. Toast只是通知的另一种类型/样式,通知组件有很多类型
  2. 仅存在Android实现
  3. 由社区https://github.com/search?q=react+native+toast维护着大量的“ toast like”组件,它们是多平台的

你怎么看待这件事?

我对保持TabBarIOS的稳定性和将来的使用感兴趣。 我觉得它与NavigatorIOS一起作为具有一流可访问性的轻量级解决方案非常有价值。

如果人们普遍认为不应将其归为“ react-native-community”,因为像NavigatorIOS一样,它已被弃用,因此我将以我自己的名义这样做,但我更喜欢在-community的保护下进行。

除了在Facebook内部未使用且仅在iOS中使用之外,是否还有其他原因要弃用?(这是一个体面的原因)?

我在这里有一个工作版本: https :

@karlsander

嗨,我将ActionSheetIOS本机代码移到了expo。 请检查🙇
https://github.com/expo/react-native-action-sheet/pull/105

我试图找到react-clone-referenced-element在哪里使用,但没有运气。 我想念什么吗? 我是贡献和响应本机代码库的新手,如果这是一个愚蠢的问题,敬请原谅。

@Rendfold您没有丢失任何东西,我想知道完全一样的东西。

这是添加了相关内容的提交: https :

看来ListView已被删除,现在可以满足依赖性。 我相信这也只在Facebook内部使用。

@ericlewis在那里更新了,但是没有添加,所以我走得更远。 不得不去2016承诺找到它所在的地方eaba2abc0b76f9a26703c87eecf4a8bb52f9ed3e
但是,是的,您是对的,它适用于ListView。

@cpojer我在DrawerLayout / DrawerLayoutAndroid中戳#23730,它似乎很孤立。

提取也将是一个很好的候选人吗? 我很乐意接受这一点。

我注意到这里提到的模块中,只有react-native-async-storagereact-native-netinfo都通过了两个平台的e2e测试, react-native-cameraroll也有它们,但是这些测试在android上都失败了。

我最近研究了使用Detox对react-native-svg进行e2e测试,并将其设置在travis和bitrise上:
https://travis-ci.org/msand/react-native-svg-e2e/builds
https://app.bitrise.io/app/1a150b039e9b8fbd#/builds

我用它在ios和android上都截取了屏幕截图,并用普通的react-native测试了新项目的设置,另外还用了cocoapods for ios。

我无权访问react-native-svg存储库的设置位, @cpojer可以获取该权限吗? 还是应该将e2e测试迁移到circleci? 看来android模拟器无论如何都可以访问kvm /加速。

要使其在travis和bitrise上没有kvm的情况下工作,就需要最新的仿真器canary,并且需要进行很多尝试来找到有效的配置,因为它们不支持加速。 无论如何,如果其他模块有兴趣在circleci以外的其他地方设置e2e,则此仓库可能有用: https :

离题:如果有人有兴趣帮助测试react-native-svg,那么从这里获取脚本/应用程序来运行测试将是很棒的: https :
可以使用https://github.com/kristerkari/react-native-svg-transformer照原样加载svg文件,然后对屏幕截图进行比较将非常有帮助。

关于弃用/拆分ART,我支持将其与react-native仓库分开,并按原样继续使用,并改善错误/改善性能。 至少如果您仅具有要渲染的简单路径数据,并且不需要svg规范的任何其他部分,则ART至少在本机中使用时,性能可能会更高。 由于它不必支持旨在实现完全svg规范一致性的功能,而不必支持那么多功能。

如果您在网络上使用ART渲染到画布,则视情况而定,它可能也比svg更快。 配置文件,以便在进行此类优化之前先找到您的实际热点/瓶颈,然后使用适当的统计数据对A / B进行适当的A / B测量。 而且,如果您已有使用ART的代码,则可以保持原样。 但是,对于新代码,我可能会建议使用符合规范的svg并以(react-native-)web兼容的方式编写(除非它需要canvas / webgl级性能)。 为此,还将在即将发布的react-native-svg版本中包括兼容性index.web.js实现。

我只是在想知道如何在React Native中读取“减少运动”选项,但似乎尚未实现。
进行功能请求并获得可见性的最佳方法是什么? https://react-native.canny.io/feature-requests仍然是功能请求的首选论坛吗?

@kristerkari我已提交了PR,在AccessibilityInfo添加了对“减少运动”的支持
https://github.com/facebook/react-native/pull/23839

@cpojer嗨,很抱歉我出去了一段时间。 我已经成功移动了react-native-status-bar。 但是并没有弃用它的核心。 我现在应该做吗?
而且我还计划为react-native-status-bar软件包创建其他发行版。

@dmtrKovalenko是的,请这样做!

为弃用状态栏制作了公关->#23898

我无权访问react-native-svg存储库的设置位, @cpojer可以获取该权限吗? 还是应该将e2e测试迁移到circleci? 看来android模拟器无论如何都可以访问kvm /加速。

@msand我认为每个人都对CircleCI感到满意,因为按照@gengjiawen的基准,它运行得更快,但是我不确定这是否是“官方的”。

react-native-cameraroll也有它们,但是测试在android上失败了。

我在通过Android测试时遇到了一些麻烦,该测试确实非常简单(是否可以启动应用),因此它在config中。 我已经从netinfo复制了配置,但是开箱即用。 @ matt-oakes您是否一眼便能看到我特别想念的东西?

@bartolkaruza这是我在NetInfo存储库中修复的问题: https :

我将提交PR来修复相机胶卷。

@cpojer是否有计划从核心中提取tvOS?

我认为我们也应该删除Button

删除还是提取? 与提取相比,我更喜欢提取。

对于当前使用提取到社区模块中的功能的本机库的问题:

推荐的依赖于提取模块的方法是什么? 直接依赖还是对等依赖?

例如, reactotron-react-native本机当前直接使用AsyncStorage。 当使用react-native-asyncstorage作为直接依赖项时,可能会导致在消费应用程序中使用多个版本。 这是计划中的还是应该成为peerDependency?

我认为这应该是一个依赖项,并且AsyncStorage将ReactNative定义为peerDependency,这样,它可以在同一个应用程序中使用多个版本的AsyncStorage(除非您要确保使用相同的版本,并在库中明确说明了这一点)自述文件),但如果ReactNative依赖项无法满足,安装过程将显示警告。

这样简单吗? 命名的本机模块“ AsyncStorage”是否可能没有多个版本? 我认为这可能会导致问题吗?

是的,会有多个版本,但是如果每个版本都是独立的,并且在它们之间不共享数据,那么应该没有问题。

嗨, @ cpojer,我想为其中的一些问题提供帮助,我可以从“将合并的PickerIOS / Picker组件移至社区仓库”开始吗?

@wagnermaciel ,我和@bartolkaruza正在研究它。 差不多完成了。 @cpojer ,您可以创建一个社区存储库吗? 实际上,我猜想该计划是将其移至社区并合并这两个组件。

https://github.com/jainkuniya/react-native-picker

@jainkuniya不用担心。 @cpojer在这里您可以分配给我任何问题吗? 我正在与一群朋友一起工作,我们都对尽可能参与其中很感兴趣👍

@wagnermaciel感谢您的加入! 我只是更新了原始帖子,并删除了对他们签约任务没有反应的人员。 如果您愿意,可以选择上面上面没有名称的任何物品。 您想从事哪一项工作?

@cpojer ,您好,我可以分配给“ ImagePickerIOS移至社区存储库”吗?我会很乐意维护它。 提前谢谢了!

@ aerlinn13

@cpojer感谢您的快速回复! 您能否将“从存储库中删除ProgressBarAndroid,可能移至社区存储库”分配给我? 我很乐意继续努力。 谢谢!!!

@wagnermaciel完成! 期待您的贡献:)

@cpojer ,我想提一下ToastAndroid组件。 你有什么想法吗?
看起来ToastAndroid在HMRLoadingView和LinkingExample中使用了。 因此,如何替换这两个组件的通知类型值得怀疑。
无论如何,如果FB在内部使用它,那么当前这不是问题,请忽略我的评论:)

我的原始帖子:

@cpojer吐司组件怎么样? 我认为现在应该不推荐使用,以后再删除它。
原因:

  1. Toast只是通知的另一种类型/样式,通知组件有很多类型
  2. 仅存在Android实现
  3. 由社区https://github.com/search?q=react+native+toast维护着大量的“ toast like”组件,它们是多平台的

你怎么看待这件事?

@radeno我不认为我们现在要删除它,但我们可能会选择稍后再删除。

抱歉@cpojer上个月真的很忙,但今天我将继续在ProgressViewIOS上工作

@cpojer我刚刚注意到“ Deprecate StatusBarIOS”已选中,但是StatusBarIOS.iosStatusBarIOS.android自2018年以来没有发生变化。我是否忽略了某些内容?

如果没有丢失,对不起。 否则,请告诉我,因为我可以提供帮助。

@cpojer您能否提供有关在哪里找到或如何为ios文件夹创建文件的说明? 提前致谢!

@wagnermaciel有关过程,请参见https://github.com/facebook/react-native/issues/23313#issuecomment -461462981。 有本地的iOS代码,因为未在其中实现: https :

@cpojer准备着手转移尚未分配的任何组件,或解决审核JS依赖项的问题。

@cpojer我想为react-native做出贡献,因为我们公司目前正在生产中使用它。 我发现这个总括性问题正在寻找良好的首要问题,但我无法理解仍然有待解决的问题。

最优先考虑的是什么? 您是否需要更多有关顶部问题的帮助(例如,将ProgressViewIOS移至社区存储库)或将来工作部分中的帮助? 有些没有分配(例如,用于移动ProgressViewIOS的分配),但正在读取似乎已被占用的线程。

@RafaelOda如今的重中之重是帮助解决问题,对

我们是否有在Wiki或其他地方建立新RNC库的说明? 它们不仅对RNC有用,而且对于所有lib来说都是模板/指南,它们将非常有用,可以供其他人找到。

我只是发现了,但还没有完成。 :)

我认为下一个候选人是:

  • KeyboardAvoidingView,SafeAreaView
  • 模态(?)。

乐于接受SafeAreaView

那些从核心的迁移是否仍在争夺中? 如果是这样,最新的下一个候选人是什么? 我也想尝试伸出援助之手:)

我认为@brentvatne @ide @ericvicenti @kmagiera已就使用第三方库(如React-Navigation和Reanimated)时仍可移出哪些内容并不会影响开发人员体验的问题提供了意见。

我们可以使用的帮助之一是摆脱在Android上的RNTester中使用ToolbarAndroid的麻烦。 有人可以用其他东西代替它的用法吗?

刚刚完成了对顶级帖子的更新。 ImagePickerIOS是尚未提取该组件的无人认领的组件之一。 是否有人愿意努力并将PR发送到在https://github.com/react-native-community/react-native-image-picker-ios创建的存储库中?

最后,似乎没有实现DatePickerIOS和DatePickerAndroid的工作,请参见https://github.com/react-native-community/discussions-and-proposals/pull/85 –这是一个很好的机会! 理想情况下,有人负责将两个DatePicker组件提取到此仓库中: https :

通过两个高级导出,DatePickerIOS和DatePickerAndroid。

如果已发布初始版本,并且RN中不赞成使用这些组件,则社区将能够将两者合并为一个组件。

cc @mmcknett和@Swaagie

添加了ReactART作为RN的另一部分,我们希望将其提取到单独的存储库中: https :

把招工广告!

我可以接受DatePickerIOSDatePickerAndroid吗?

@sijad您之前曾经使用过React Native,并且有计划进行提取的计划吗?

@cpojer我可以从下周一开始使用ReactART吗? 我目前正在宣扬和推动RN在工作中的采用,因此我不得不处理ReactART并将本地代码包装为可重用的RN包。

@ivanmoskalev听起来很棒! 让我知道您什么时候开始,并为我创建的新仓库进行PR :)

@cpojer您是否偶然地完全忽略了review分支? 它的所有工作都减去了文档,还进行了一些排毒测试。

编辑:cc @ sijad为意识

编辑2: https : review分支中。 我无权重新创建该回购atm,但想结束它。

还有@sijad ,如果您希望以全面的评论和代码修复的形式(如有需要)做出贡献,那将是非常受欢迎的!

@cpojer @sijad确实实现了@Swaagie提到的工作。 我也接触了Discord。

不用担心缺少分支机构-可以轻松忽略它。 回想一下,我本该建议马丁(Martijn)在Draft -state开一家公关公司,而他继续为我们爆发并进入冲刺的工作做出较小的公关。

react-native-community上,有没有地方我可以建议精益核心中这些较小模块的标准操作程序的文档? 我们在react-native-datetimepicker上进行了很多迭代,我们很乐意与更广泛的社区共享,使其他模块化工作更容易/更快。

噢,天哪,我一定有一个,然后用另一个名字-.-重新创建了一个仓库。

您可以向新的日期选择器发送PR吗?

会做! 感谢您的快速周转! 同样也没有难过的感觉,我们都是人类,就像

@cpojer您能否更新顶部文章并将我的github句柄添加到:
Merge DatePickerIOS and DatePickerAndroid, move to community repo
谢谢!

@Swaagie完成!

如果您采用https://github.com/yfuks/react-native-action-sheet并将其与ActionSheetIOS合并,那就太神奇了

如果您要维护为将API从React Native核心中移出而创建的存储库,请确保您能够支持其他平台的实现,并确保查看react-native-web中的等效实现并做出反应-本机窗口。

@cpojer您真的在做所有这些事情吗,或者我可以抓住其中一个吗?
FWIW我在RCTImagePickerIOS方面已经取得了进展,并将在接下来的几天内提交PR。

@ Johan-dutoit是的,很遗憾,模块的移除只能由Facebook员工完成。 期待您的ImagePickerIOS提取!

@ cpojer🎉PR提交并测试🎉

@cpojer我希望您在readme.md文件中对那些被认为有点令人困惑的文件夹进行本地响应,该文件解释了您打算在每个文件中执行的操作。 这将极大地方便那些想为该项目做出贡献的人。 像鱼钩

例如

image

  • React.js
    该文件的主要目的是...
  • react-native-implementation.js
    该文件的主要目的是...
  • react-native-interface.js
    该文件的主要目的是...

这三个文件可能有点容易理解,但是当我们拥有此类文件时,可能会有些复杂。
image

显然,它们不必过于描述性,更不用说描述每个文件的功能了。 在某个文件夹中,只有最相关或最基本的定义。

此外,显示此存储库工作原理的概述将非常有帮助。 我想知道你的意见。 谢谢你所做的一切。

@cpojer还有什么我可以接的吗? 很想参与其中。

正如@FLGMwthttps://github.com/facebook/react-native/issues/23313#issuecomment -469288200中提到的那样,将DrawerLayoutAndroid移出也很好

同样也可以移动ToastAndroidAnimated

@ecreeth ,这些文件使用createReactClass,因为它们依赖于尚未删除的mixin。 使用createReactClass的文件仍在使用propTypes,但一旦更新,它们将被丢弃以用于Flow。

@TheSavior非常感谢您提供的信息!

愿意贡献自己的力量,我发现尚未将“将按钮移至社区回购”。 需要做什么? 希望能为您提供帮助!

当然。 只需检查其他https://github.com/react-native-community/react-native-netinfo等即可。 您需要具有适用于ios和android的本机代码,以及所有js。 不幸的是,我们没有创建新库的特定方法。

嗨,在RN中删除webview后如何使用webview

嗨,很乐意为您服务! 我看到所有“删除”任务都已分配给@cpojer ,是否可以删除任何类以寻求帮助? 例如“ ImageStore”

嘿,我可以帮助您移动DatePickerComponents,请让我知道我能为您提供什么帮助@cpojer ,谢谢!

您好@cpojer ,我可以帮助移动CheckBox组件,如果您能指导我进行此过程,将不胜感激。 谢谢!

我很高兴能将Button移到新的社区回购中。 希望能获得一些有关如何进行的指导,但是我将首先查看源代码并开始获得我的指导。 @cpojer,请指教。

打开PR删除Remove DatePickerAndroid,DatePickerIOS,Tim​​ePickerAndroid

https://github.com/facebook/react-native/pull/26729

我们如何决定何时将新的出口添加到核心? 例如, useWindowDimensions挂钩可以在用户空间中构建,但已添加到核心中-https://github.com/facebook/react-native/blob/3b3c95b0170e60983eb6e89b910d100d08eee141/Libraries/Utilities/useWindowDimensions .js

我认为我们对钩子的想法是现代化反应本机核心以默认提供钩子是有意义的。 只响应本机仅提供旧版API并将钩子包装在单独的社区包中,这感觉并不好。

因此,我认为钩子是一个特定的问题,与通常向核心添加新出口不同。

嘿大家! 当前,社区成员无法采取任何行动。 当前计划的删除操作被暂停的原因有两个:

  • 我们需要等待一段时间,直到我们删除组件,以使社区有时间迁移到提取的版本。
  • 删除操作只能由Facebook的某人完成,因为实际上我们只是将这些文件移至Facebook内部,直到将来我们采用外部模块为止。

关于基于挂钩的API,此问题不是该讨论的正确途径。 总的来说,我认为在将来重新考虑公共API时,我们应该逐步添加基于挂钩的API。

大家好,我是开源项目的新手,我想知道我是否仍然可以帮助解决这个问题。

由于两个原因,当前计划的删除处于暂停状态...

反正(无声地)删除了ToolbarAndroid是一个错误吗?

@cpojer我可以“将按钮移到社区存储库”吗?

@Archulan,您可以将您的PR发送到react-native-button

@Archulan看到此评论#23313(评论)

@Archulan,您可以将您的PR发送到react-native-button

好的。 你能指导我这样做吗?

我认为将Button移出没有意义。 该组件非常小,有助于在无需安装任何库的情况下就位一些基本功能。

@brentvatne

我认为将Button移出没有意义。

所以很奇怪,像react包含<Button/>

革命后应该有

react-native = jsi(fabric & turbomodule) + codegen

其他可能由社区推动。

以获得一些基本功能。

也许应该在react-nativereact-native-element使用monorepo,就像在reactreact-dom使用monorepo

@cpojer振动(https://reactnative.dev/docs/vibration)是否也移至社区项目? 如果是这样,并且由于它似乎足够小,我可以提供帮助。

@cpojer我可以删除ImageStore吗?

可能对此有帮助吗? 我是一个初学者,我想我可以从中学到很多。
问候。
曼努埃尔·波特罗(Manuel Portero)。

如果仍然需要任何帮助,我很乐意为您提供帮助😃

我也是

我想贡献。 有什么我可以做的吗?

有什么我可以做的吗?

我想贡献自己的力量,我能做些什么吗?

此页面是否有帮助?
0 / 5 - 0 等级