Ответ 1
Местоположение модуля emptyObject
, к которому относится React, относится к https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/emptyObject.js#L9 Обратите внимание, что он не соответствует системе модулей CommonJS.
Чтобы Facebook стал делиться и потреблять наш собственный JavaScript. В первую очередь это позволит нам отправлять код, не беспокоясь о том, где он живет, и поддерживает дух @providesModule, но работает в более широкой экосистеме JavaScript.
От https://github.com/facebook/fbjs#purpose
Способ определения модуля путем добавления @providesModule
в заголовок лицензии и загрузки этих модулей с помощью require
в Node называется Haste - настраиваемой системой модулей, созданной для проектов с открытым исходным кодом для Facebook.
На самом деле, если вы не хотите понять внутреннюю работу React или внести вклад в проекты с открытым исходным кодом Facebook, вам не нужно это знать. Другими словами, не рекомендуется использовать Haste для написания собственного проекта.
В то же время модуль invariant
, загружаемый по строке 10 ReactClass.js
, объявляется в https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/invariant.js#L9
Насколько я знаю, оба Eclipse и WebStorm не поддерживают Haste, поэтому среда IDE не может помочь. Но с Haste имя файла и модуля должно быть одинаковым, поэтому вы можете найти модуль, выполнив поиск имени файла, то есть двойной сдвиг в Webstorm и Ctrl + Shift + r в Eclipse. Тем не менее, emptyObject
, о котором вы спрашивали, или invariant
, не являются частью React, поэтому он все еще громоздко обнаруживает их происхождение.
В противном случае есть команда, которая делится и организует то, что они узнают, от взлома React, который я иногда вношу, и они связали те require
, следуя Haste в соответствующий файл происхождения, например. https://annot.io/github.com/facebook/react/blob/cc3dc21/src/isomorphic/classic/class/ReactClass.js?l=19 Вы можете увидеть это.