forked from GetStream/react-native-example
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rn-cli.config.js
59 lines (55 loc) · 1.76 KB
/
rn-cli.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* eslint-env node */
const fs = require('fs');
const path = require('path');
try {
// >= 0.57
blacklist = require('metro-config/src/defaults/blacklist');
} catch (e) {
// <= 0.56
blacklist = require('metro/src/blacklist');
}
let repoDir = path.dirname(__dirname);
module.exports = {
getBlacklistRE() {
return blacklist([
new RegExp(repoDir + '/example/'),
new RegExp(repoDir + '/native-example/(.*)'),
new RegExp(repoDir + '/native-package/(.*)'),
new RegExp(repoDir + '/expo-package/node_modules/(.*)'),
new RegExp(repoDir + '/node_modules/(.*)'),
]);
},
extraNodeModules: getNodeModulesForDirectory(path.resolve('.')),
};
function getNodeModulesForDirectory(rootPath) {
const nodeModulePath = path.join(rootPath, 'node_modules');
const folders = fs.readdirSync(nodeModulePath);
return folders.reduce((modules, folderName) => {
const folderPath = path.join(nodeModulePath, folderName);
if (folderName.startsWith('@')) {
const scopedModuleFolders = fs.readdirSync(folderPath);
const scopedModules = scopedModuleFolders.reduce(
(scopedModules, scopedFolderName) => {
scopedModules[
`${folderName}/${scopedFolderName}`
] = maybeResolveSymlink(path.join(folderPath, scopedFolderName));
return scopedModules;
},
{},
);
return Object.assign({}, modules, scopedModules);
}
modules[folderName] = maybeResolveSymlink(folderPath);
return modules;
}, {});
}
function maybeResolveSymlink(maybeSymlinkPath) {
if (fs.lstatSync(maybeSymlinkPath).isSymbolicLink()) {
const resolved = path.resolve(
path.dirname(maybeSymlinkPath),
fs.readlinkSync(maybeSymlinkPath),
);
return resolved;
}
return maybeSymlinkPath;
}