mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-02-08 22:42:40 +08:00
Fix @providesModule not being ignored properly
Summary:
There's quite a bit of code scattered around the packager regarding ignoring the `providesModule` Haste pragma in any file that isn't in `react-native`, `react-tools` or `parse`. There is even a (passing) test case.
However, there's an edge case.
Take, for example, `fbjs`. It has a module inside of it called `ErrorUtils`. `react-relay` requires this file normally, in Common.JS style, by doing `require('fbjs/libs/ErrorUtils')`. But when `react-native` attempts to require `ErrorUtils` using the HasteModule format (in it's JavaScript initialization), it resolves the `fbjs` `ErrorUtils` module, instead of RN's `ErrorUtils`.
This happens, it turns out, because when a module is read (in `Module._read`), it's not caring about whether or not it should pay attention to `providesModule`, and is just assigning the `providesModule` value as the id of the module no matter what. Then when `Module.getName` is called, it will always use that `data.id` that was set, thus creating the wrong dependency tree.
This
Closes https://github.com/facebook/react-native/pull/3625
Reviewed By: svcscm
Differential Revision: D2632317
Pulled By: vjeux
fb-gh-sync-id: efd8066eaf6f18fcf79698beab36cab90bf5cd6d
This commit is contained in:
committed by
facebook-github-bot-5
parent
59885911e3
commit
6cec263ca3
@@ -7,25 +7,27 @@ const path = require('path');
|
||||
|
||||
class ModuleCache {
|
||||
|
||||
constructor(fastfs, cache, extractRequires) {
|
||||
constructor(fastfs, cache, extractRequires, depGraphHelpers) {
|
||||
this._moduleCache = Object.create(null);
|
||||
this._packageCache = Object.create(null);
|
||||
this._fastfs = fastfs;
|
||||
this._cache = cache;
|
||||
this._extractRequires = extractRequires;
|
||||
this._depGraphHelpers = depGraphHelpers;
|
||||
fastfs.on('change', this._processFileChange.bind(this));
|
||||
}
|
||||
|
||||
getModule(filePath) {
|
||||
filePath = path.resolve(filePath);
|
||||
if (!this._moduleCache[filePath]) {
|
||||
this._moduleCache[filePath] = new Module(
|
||||
filePath,
|
||||
this._fastfs,
|
||||
this,
|
||||
this._cache,
|
||||
this._extractRequires
|
||||
);
|
||||
this._moduleCache[filePath] = new Module({
|
||||
file: filePath,
|
||||
fastfs: this._fastfs,
|
||||
moduleCache: this,
|
||||
cache: this._cache,
|
||||
extractor: this._extractRequires,
|
||||
depGraphHelpers: this._depGraphHelpers
|
||||
});
|
||||
}
|
||||
return this._moduleCache[filePath];
|
||||
}
|
||||
@@ -33,12 +35,12 @@ class ModuleCache {
|
||||
getAssetModule(filePath) {
|
||||
filePath = path.resolve(filePath);
|
||||
if (!this._moduleCache[filePath]) {
|
||||
this._moduleCache[filePath] = new AssetModule(
|
||||
filePath,
|
||||
this._fastfs,
|
||||
this,
|
||||
this._cache,
|
||||
);
|
||||
this._moduleCache[filePath] = new AssetModule({
|
||||
file: filePath,
|
||||
fastfs: this._fastfs,
|
||||
moduleCache: this,
|
||||
cache: this._cache,
|
||||
});
|
||||
}
|
||||
return this._moduleCache[filePath];
|
||||
}
|
||||
@@ -46,11 +48,11 @@ class ModuleCache {
|
||||
getPackage(filePath) {
|
||||
filePath = path.resolve(filePath);
|
||||
if (!this._packageCache[filePath]) {
|
||||
this._packageCache[filePath] = new Package(
|
||||
filePath,
|
||||
this._fastfs,
|
||||
this._cache,
|
||||
);
|
||||
this._packageCache[filePath] = new Package({
|
||||
file: filePath,
|
||||
fastfs: this._fastfs,
|
||||
cache: this._cache,
|
||||
});
|
||||
}
|
||||
return this._packageCache[filePath];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user