gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:15:14 26 4
gpt4 key购买 nike

我正在浏览 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com