React库如何直接需要它的源库?

2024-02-22

我正在查看 Facebook 的 React 源代码,发现在整个项目源代码中,他们没有指定加载自己模块的相对路径。例如,而不是做var foo = require('../bar/foobar')图书馆使用var foo = require('foobar')就像模块被加载到node_modules已经可供 CommonJS 阅读。

我只是想知道他们是如何做到这一点的?我尝试通过 Grunt 查看他们的构建步骤,但看不到任何直接完成此操作的包。

对于我正在谈论的技术的更具体示例,here https://github.com/facebook/react/blob/master/src/core/ReactChildReconciler.js#L17图书馆称flattenChildren模块存在于完全不同的目录 https://github.com/facebook/react/blob/master/src/utils/flattenChildren.js不指定路径。


React 使用一个名为commoner https://github.com/reactjs/commoner。他们的配置与如下所示的行相匹配:

* @providesModule ReactChildReconciler

To require('ReactChildReconciler')来电。他们还将所有内容都放在一个目录中,因此路径最终为require('./ReactChildReconciler').

The source code is organized in a structured way, but the module names are globally unique to the repo (and all of facebook's internal code, I think [citation needed]). This means there's no ambiguity in what it points to.


关于这个问题,react 的代码中还有一些其他神奇的东西。

致电invariant(assertion, explanation, ...)和类似的warning通过删除第一个参数之后的参数以节省空间,将调用转换为生产构建。警告调用被完全剥离,因为它们被包裹在下一个魔法中:仅开发块。

if (__DEV__) {
   ...
}

编译为:

if (process.env.NODE_ENV !== 'production') {
   ...
}

通过 envify,编译为此(正在开发中),并且代码运行:

if ('development' !== 'production') {
   ...
}

这在生产中:

if ('production' !== 'production') {
   ...
}

这缩小为:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React库如何直接需要它的源库? 的相关文章

随机推荐

  • PySpark:如何重新采样频率

    想象一个由变量的值观察组成的 Spark Dataframe 每个观察都有一个特定的时间戳 并且不同变量之间的这些时间戳不相同 这是因为时间戳是在变量值更改并记录时生成的 Variable Time Value 852 YF 007 201
  • 在 Phonegap 2.5 中加载外部 URL 时出错

    我从头开始创建了一个新的 Phonegap 2 5 项目 我一直在尝试在其中加载外部 URL 但在加载实际 URL 之前 我总是在启动时弹出输入框 我首先看到一个带有网站 URL 的弹出窗口 然后在输入框中显示 DeviceInfo Dev
  • 通过多点连接发送和接收邀请

    我知道这个问题之前已经被问过 但我只是想知道为什么它在我的特定情况下不起作用 我正在尝试从一个视图控制器的多点连接发送邀请 并在另一个视图控制器上接收它 我的发送代码是 self invitePeer selectedPeerID toSe
  • Chrome 中的 cors 预检选项请求速度缓慢 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在努力解决一个奇怪的问题 这只发生在 Chrome 中 我的 Angular SPA 与不同子域 api domai
  • html 堆栈顺序

    考虑以下代码
  • 将字符串转换为日期 [包含年份和季度]

    我有一个 pandas 数据框 其中一列包含年份和季度的字符串 格式如下 2015Q1 我的问题 如何将其转换为两个日期时间列 一个代表年份 一个代表季度 您可以使用split http pandas pydata org pandas d
  • EF Core 中修改的实体所拥有的类型属性不持久

    我正在尝试在 EF Core 中实现一些在 EF 6 中对我来说非常有效的目标 我正在序列化 a 的内容List
  • 不使用密钥库的客户端证书

    我试图弄清楚是否有任何方法可以让 NET 客户端使用客户端证书而不以任何方式涉及 Windows 密钥库 我有一个这样的代码片段 test1 Service s new test1 Service X509Certificate c X50
  • JFreeChart日期轴格式化问题

    我有一个时间序列图表 我的 X 轴是日期 Y 轴只是数字 我正在尝试格式化 x 轴上的日期 但是我不断收到异常 我的代码如下 TimeSeries trueSeries new TimeSeries True Data TimeSeries
  • firebase 正在从数据库中检索已删除的数据

    我正在使用 firebase 实时数据库 它对于我的应用程序的某些部分运行良好 我正在阅读 youtube 上的一个教程 该教程用用户填充 collectionView 它使用 NSDictionary 获取照片 URL 和用户名 并将它们
  • Spring Boot + Angular 文件上传无法上传同一文件两次

    chrome 网络下出错 timeStamp status 400 error Bad Request message Required request part file is not present path url as hosted
  • malloc 和 realloc 之间的区别?

    假设我有两个用于创建 10 个元素的整数数组的代码示例 int pi int 0 realloc pi 10 另一种是正常写法 即 int pi pi malloc 10 sizeof int 现在 我的问题是 第一种赋值是合法的 但没有被
  • 点间最短距离算法

    给定平面上的一组点 找到由这些点中的任意两个点形成的最短线段 我怎样才能做到这一点 最简单的方法显然是计算每个距离 但我需要另一种算法来比较 http en wikipedia org wiki Closest pair of points
  • Nginx 身份验证(本地网络除外)

    来自 apache2 的一个功能我无法实现 仅要求对外部访问进行身份验证 但对本地网络上的用户进行免费访问 有什么想法可以轻松处理这种情况吗 任何帮助 将不胜感激 我已经删除了之前的答案 并想建议我在下面提供的解决方案 我做了一些搜索 找到
  • .net标准类库-不支持分布式事务错误

    我在 net标准类库项目中开发了一个日志服务 它可以完美工作 无需系统 事务 事务范围类 当我向进程添加事务时 记录器插入方法引发异常 该平台不支持分布式事务 当我使用 System Transaction 将代码添加到核心控制台应用程序时
  • 我应该如何在KAA中实现Rest API

    我使用 Kaa 沙箱发送通知 我必须在窗口终端上运行这些代码 curl v S u devuser devuser123 F notification applicationId 3 schemaId 4 topicId 1 type US
  • Python 全局变量的疯狂

    您有三个文件 main py second py 和 common py 通用 py usr bin python GLOBAL ONE Frank main py usr bin python from common import fro
  • Blazor - 在运行时更改 UI CultureInfo

    我需要根据每种文化的资源文件在运行时更改文化 Expected 用户单击从当前语言切换到另一种语言的按钮 页面中的文本根据每种文化的资源文件进行刷新 Actual 用户单击从当前语言切换到另一种语言的按钮 页面中的文本根据每种文化的资源文件
  • Visual Studio 2015 中没有针对 AngularJS TypeScript 的 IntelliSense

    我正在 Visual Studio 2015 的 TypeScript 中使用 ASP NET 5 和 AngularJS 构建一个应用程序 但是 即使在通过 NuGet 安装了 AngularJS Core 和 DefinelyTyped
  • React库如何直接需要它的源库?

    我正在查看 Facebook 的 React 源代码 发现在整个项目源代码中 他们没有指定加载自己模块的相对路径 例如 而不是做var foo require bar foobar 图书馆使用var foo require foobar 就