Skip to content

Commit cb27cf0

Browse files
authored
perf: improve auto linking performance (#2670)
* perf: avoid double invoking of native deps * perf: use codegen config to find component descriptors * perf: exclude .cxx from findManifest and findPackageClassName * perf: add android to exclude pattern in findAllPodfilePaths as it's not scoped to sourceDir * chore: remote node_modules and pods from findManifest as we're in android folder
1 parent 1301dde commit cb27cf0

File tree

5 files changed

+24
-7
lines changed

5 files changed

+24
-7
lines changed

packages/cli-config-android/src/config/findComponentDescriptors.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,20 @@ import {extractComponentDescriptors} from './extractComponentDescriptors';
55
import {unixifyPaths} from '@react-native-community/cli-tools';
66

77
export function findComponentDescriptors(packageRoot: string) {
8-
const files = glob.sync('**/+(*.js|*.jsx|*.ts|*.tsx)', {
8+
let jsSrcsDir = null;
9+
try {
10+
const packageJson = fs.readFileSync(
11+
path.join(packageRoot, 'package.json'),
12+
'utf8',
13+
);
14+
jsSrcsDir = JSON.parse(packageJson).codegenConfig.jsSrcsDir;
15+
} catch (error) {
16+
// no jsSrcsDir, continue with default glob pattern
17+
}
18+
const globPattern = jsSrcsDir
19+
? `${jsSrcsDir}/**/+(*.js|*.jsx|*.ts|*.tsx)`
20+
: '**/+(*.js|*.jsx|*.ts|*.tsx)';
21+
const files = glob.sync(globPattern, {
922
cwd: unixifyPaths(packageRoot),
1023
onlyFiles: true,
1124
ignore: ['**/node_modules/**'],

packages/cli-config-android/src/config/findManifest.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,14 @@ export default function findManifest(folder: string) {
1414
let manifestPaths = glob.sync('**/AndroidManifest.xml', {
1515
cwd: unixifyPaths(folder),
1616
ignore: [
17-
'node_modules/**',
1817
'**/build/**',
1918
'**/debug/**',
2019
'Examples/**',
2120
'examples/**',
22-
'**/Pods/**',
2321
'**/sdks/hermes/android/**',
2422
'**/src/androidTest/**',
2523
'**/src/test/**',
24+
'**/.cxx/**',
2625
],
2726
});
2827
if (manifestPaths.length > 1) {

packages/cli-config-android/src/config/findPackageClassName.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ export function getMainActivityFiles(
2525

2626
return glob.sync(`**/+(${patternArray.join('|')})`, {
2727
cwd: unixifyPaths(folder),
28+
onlyFiles: true,
29+
ignore: ['**/.cxx/**'],
2830
});
2931
}
3032

packages/cli-config-apple/src/config/findAllPodfilePaths.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import glob from 'fast-glob';
99
import {unixifyPaths} from '@react-native-community/cli-tools';
1010

1111
// These folders will be excluded from search to speed it up
12-
const GLOB_EXCLUDE_PATTERN = ['**/@(Pods|node_modules|Carthage|vendor)/**'];
12+
const GLOB_EXCLUDE_PATTERN = [
13+
'**/@(Pods|node_modules|Carthage|vendor|android)/**',
14+
];
1315

1416
export default function findAllPodfilePaths(cwd: string) {
1517
return glob.sync('**/Podfile', {

packages/cli-config/src/commands/config.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ function isValidRNDependency(config: DependencyConfig) {
1010

1111
function filterConfig(config: Config) {
1212
const filtered = {...config};
13+
const dependencies: Record<string, DependencyConfig> = {};
1314
Object.keys(filtered.dependencies).forEach((item) => {
14-
if (!isValidRNDependency(filtered.dependencies[item])) {
15-
delete filtered.dependencies[item];
15+
if (isValidRNDependency(filtered.dependencies[item])) {
16+
dependencies[item] = filtered.dependencies[item];
1617
}
1718
});
18-
return filtered;
19+
return {...filtered, dependencies};
1920
}
2021

2122
export default {

0 commit comments

Comments
 (0)