Fix issues with the new fork plugin (#11723)
Dan Abramov committed
Nov 30, 2017 at 16:20 UTC
060581b1287ea75d128f8f6b2b7bf494fe5db4fa
1 file changed
+31
-7
scripts/rollup/plugins/use-forks-plugin.js
+31
-7
@@ -7,19 +7,45 @@
7
'use strict';
8
9
const path = require('path');
10
+const semver = require('semver');
11
+
12
+function resolveRelatively(importee, importer) {
13
+ if (semver.gte(process.version, '8.9.0')) {
14
+ return require.resolve(importee, {
15
+ paths: [path.dirname(importer)],
16
+ });
17
+ } else {
18
+ // `paths` argument is not available in older Node.
19
+ // This works though.
20
+ // https://github.com/nodejs/node/issues/5963
21
+ const Module = require('module');
22
+ return Module._findPath(importee, [
23
+ path.dirname(importer),
24
+ ...module.paths,
25
+ ]);
26
+ }
27
+}
28
29
let resolveCache = new Map();
30
function useForks(forks) {
13
- let resolvedForks = {};
31
+ let resolvedForks = new Map();
32
Object.keys(forks).forEach(srcModule => {
33
const targetModule = forks[srcModule];
16
- resolvedForks[require.resolve(srcModule)] = require.resolve(targetModule);
34
+ resolvedForks.set(
35
+ require.resolve(srcModule),
36
+ require.resolve(targetModule)
37
+ );
38
});
39
return {
40
resolveId(importee, importer) {
41
if (!importer || !importee) {
42
return null;
43
}
44
+ if (importee.startsWith('\u0000')) {
45
+ // Internal Rollup reference, ignore.
46
+ // Passing that to Node file functions can fatal.
47
+ return null;
48
+ }
49
let resolvedImportee = null;
50
let cacheKey = `${importer}:::${importee}`;
51
if (resolveCache.has(cacheKey)) {
@@ -27,9 +53,7 @@ function useForks(forks) {
53
resolvedImportee = resolveCache.get(cacheKey);
54
} else {
55
try {
30
- resolvedImportee = require.resolve(importee, {
31
- paths: [path.dirname(importer)],
32
- });
56
+ resolvedImportee = resolveRelatively(importee, importer);
57
} catch (err) {
58
// Not our fault, let Rollup fail later.
59
}
@@ -37,9 +61,9 @@ function useForks(forks) {
61
resolveCache.set(cacheKey, resolvedImportee);
62
}
63
}
40
- if (resolvedImportee && resolvedForks.hasOwnProperty(resolvedImportee)) {
64
+ if (resolvedImportee && resolvedForks.has(resolvedImportee)) {
65
// We found a fork!
42
- return resolvedForks[resolvedImportee];
66
+ return resolvedForks.get(resolvedImportee);
67
}
68
return null;
69
},