Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';在React中找不到所需的模块_Javascript_Node.js_Facebook_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript Can';在React中找不到所需的模块

Javascript Can';在React中找不到所需的模块,javascript,node.js,facebook,reactjs,ecmascript-6,Javascript,Node.js,Facebook,Reactjs,Ecmascript 6,我正在浏览React代码库,我注意到React的require与Nodejs中的行为不太一样。我不明白这是怎么回事 以ReactClass.js上的第19行为例,有一个require('emptyObject'),但package.json中没有列出emptyObject,也没有说明该模块来自何处 我确实找到了,但那里的API似乎与React中使用的API不同;React中的.isEmpty与emptyObject无关 那么,emptyObject是从哪里加载的,React的require是如

我正在浏览React代码库,我注意到React的
require
与Nodejs中的行为不太一样。我不明白这是怎么回事

以ReactClass.js上的第19行为例,有一个
require('emptyObject')
,但package.json中没有列出emptyObject,也没有说明该模块来自何处

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

那么,emptyObject是从哪里加载的,React的
require
是如何执行它正在执行的操作的呢?这是不直观的。一点也不

我注意到React的
require
与Nodejs的行为不太一样

对。Facebook有自己的模块加载器。所有模块都有唯一标识符,由每个模块中的
@providesModule
指令提供。这允许您使用标识符来加载模块,而不是文件路径

当然,这在基于Node.js的环境中不起作用。因此,当React或任何其他Facebook项目发布到npm时,所有
require
调用都会自动重写为Node能够理解的内容

此功能由提供,其中包含所有Facebook项目的共享依赖项和构建帮助程序


如果你看一下,你可以看到模块映射是如何构造的,一个定制的Babel插件被用来转换所有
require
调用。

React所指的
emptyObject
模块的位置是值得注意的,它不遵循CommonJS模块系统

让Facebook更容易分享和使用我们自己的JavaScript。这将使我们能够在不太担心代码的位置的情况下发布代码,与@providesModule的精神保持一致,但在更广泛的JavaScript生态系统中工作

通过在许可证标题中添加
@providesModule
并在节点中加载带有
require
的模块来定义模块的方法称为Haste,这是为Facebook的开源项目构建的定制模块系统

事实上,除非你想了解React的内部工作原理或为Facebook的开源项目做出贡献,否则你不需要知道这一点。换言之,不建议匆忙编写自己的项目

同样,在
ReactClass.js
的第10行加载的
invariant
模块在

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


否则,会有一个团队分享和组织他们从黑客攻击中学到的东西,我偶尔也会参与其中,他们通过遵循Haste将这些
要求链接到相应的原始文件,例如,您可能希望看到这些。

有关Haste的详细信息,看,我没有使用这些IDE中的任何一个,但是我想
find
inginthefacebook/fbjsdir可以吗?annot.io链接很有趣。谢谢。处理像JavaScript这样没有IDE的动态语言可能会让人恼火,特别是在这样有FaceBookism的项目上。那你用什么呢?我是emacs最近的信徒,但很虔诚。它似乎可以很好地与JavaScript配合使用,即使是React,但进一步的经验可能会证明,gulp文件是如何执行它所执行的操作的。谢谢我选择了@donghwan kim的答案,因为他提到了寻找目标模块的匆忙和各种方法。