javascript - 在 React 中找不到所需的模块

标签 javascript node.js facebook reactjs ecmascript-6

我正在浏览 React 代码库,我注意到 React 的 require 与 Nodejs 中的行为不太一样。我不明白这里发生了什么。

例如,查看 ReactClass.js 的第 19 行,有一个 require('emptyObject'),但 package.json 中没有列出 emptyObject,也没有说明该模块的任何位置来自。

https://github.com/facebook/react/blob/master/src/isomorphic/classic/class/ReactClass.js#L19

我确实找到了 "emptyObject" on npmjs ,但那里的 API 似乎与 React 中使用的不同; React 中 grepped 的 .isEmpty 与 emptyObject 无关。

那么 emptyObject 是从哪里加载的,React 的 require 是如何做的呢?这并不直观。完全没有。

最佳答案

React 引用的 emptyObject 模块的位置是 https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/emptyObject.js#L9请注意,它不遵循 CommonJS 模块系统。

To make it easier for Facebook to share and consume our own JavaScript. Primarily this will allow us to ship code without worrying too much about where it lives, keeping with the spirit of @providesModule but working in the broader JavaScript ecosystem.

来自 https://github.com/facebook/fbjs#purpose

通过在许可头中添加 @providesModule 并在 Node 中使用 require 加载这些模块来定义模块的方式称为 Haste,这是一个为 Facebook 构建的定制模块系统开源项目。

事实上,除非您想了解 React 的内部工作原理或为 Facebook 的开源项目做出贡献,否则您不需要知道这些。也就是说,不建议使用 Haste 编写自己的项目。

同样,在 ReactClass.js 的第 10 行加载的 invariant 模块在 https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/invariant.js#L9 声明

据我所知,Eclipse 和 WebStorm 都不支持 Haste,所以 IDE 无能为力。但是使用Haste,文件名和模块名应该是一样的,所以你可以通过搜索文件名找到一个模块,即Webstorm中的double shift和Ctrl+Shift +r 在 Eclipse 中。但是,您询问的 emptyObjectinvariant 不是 React 的一部分,因此查找它们的来源仍然很麻烦。

否则,有一个团队会分享和组织他们从黑客 React 中学到的东西,我偶尔会做出贡献,他们通过跟随 Haste 将这些 require 链接到相应的原始文件,例如https://annot.io/github.com/facebook/react/blob/cc3dc21/src/isomorphic/classic/class/ReactClass.js?l=19你可能想看看。

关于javascript - 在 React 中找不到所需的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353532/

相关文章:

javascript - 了解表单中使用的语言

javascript - Sequelize : Category Model hierarchical structure with self reference

node.js - 如何使用从 mongodb 返回的数据而不是返回它

iphone - 测试与 facebook 集成的应用程序

JavaScript Puzzle : Initialize 2 Date variables with same value, 但结果它们代表不同的日历日期

javascript - 发送动态变量到jquery

javascript - 如何模块化 Chakram 中的函数以获取值

javascript - 如何在node.js中生成进程时记录信息?

php - Yii2 AuthClient 不适用于 facebook 登录

facebook - 如何使用 Facebook insights API 获取广告最终 url