Skip to content

[0.79] Remove rnw/cli dependency on rnc/cli #14976

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 29, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Remove rnw/cli dependency on rnc/cli",
"packageName": "@react-native-windows/cli",
"email": "[email protected]",
"dependentChangeType": "patch"
}
1 change: 1 addition & 0 deletions packages/@react-native-windows/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"chalk": "^4.1.0",
"cli-spinners": "^2.2.0",
"envinfo": "^7.5.0",
"execa": "^5.0.0",
"find-up": "^4.1.0",
"glob": "^7.1.1",
"lodash": "^4.17.15",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,15 @@ import {XMLSerializer} from '@xmldom/xmldom';
import {Ora} from 'ora';
const formatter = require('xml-formatter');

import {
import type {
Command,
Config,
DependencyConfig,
ProjectConfig,
} from '@react-native-community/cli-types';
import {Telemetry, CodedError} from '@react-native-windows/telemetry';
import {AutoLinkOptions, autolinkOptions} from './autolinkWindowsOptions';
import type {AutoLinkOptions} from './autolinkWindowsOptions';
import {autolinkOptions} from './autolinkWindowsOptions';

import {
newSpinner,
Expand All @@ -39,11 +40,11 @@ import {
startTelemetrySession,
endTelemetrySession,
} from '../../utils/telemetryHelpers';
import {
import type {
WindowsDependencyConfig,
ProjectDependency,
} from '../config/dependencyConfig';
import {Project, WindowsProjectConfig} from '../config/projectConfig';
import type {Project, WindowsProjectConfig} from '../config/projectConfig';

export class AutoLinkWindows {
private changesNecessary: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* @format
*/

import {CommandOption} from '@react-native-community/cli-types';
import type {CommandOption} from '@react-native-community/cli-types';

export interface AutoLinkOptions {
logging?: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ import chalk from 'chalk';
import {performance} from 'perf_hooks';
import {Ora} from 'ora';

import {Command, Config} from '@react-native-community/cli-types';
import type {Command, Config} from '@react-native-community/cli-types';
import {Telemetry, CodedError} from '@react-native-windows/telemetry';
import {
import type {
CodeGenOptions as RnwCodeGenOptions,
CppStringTypes,
runCodeGen,
} from '@react-native-windows/codegen';
import {runCodeGen} from '@react-native-windows/codegen';

import {
newSpinner,
Expand All @@ -26,7 +26,8 @@ import {
startTelemetrySession,
endTelemetrySession,
} from '../../utils/telemetryHelpers';
import {CodeGenOptions, codegenOptions} from './codegenWindowsOptions';
import type {CodeGenOptions} from './codegenWindowsOptions';
import {codegenOptions} from './codegenWindowsOptions';

export class CodeGenWindows {
private changesNecessary: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* @format
*/

import {CommandOption} from '@react-native-community/cli-types';
import type {CommandOption} from '@react-native-community/cli-types';

export interface CodeGenOptions {
logging?: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,7 @@ import path from 'path';

import * as pathHelpers from '../../utils/pathHelpers';

const rnDir = pathHelpers.resolveRnRoot(process.cwd());
const cliDir = pathHelpers.resolveRnCliRoot(rnDir);

const execaPath = require.resolve('execa', {paths: [cliDir]});
const execa = require(execaPath);
import execa from 'execa';

import type {
HealthCheckCategory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import util from 'util';

const glob = util.promisify(globFunc);

import {Command, Config} from '@react-native-community/cli-types';
import type {Command, Config} from '@react-native-community/cli-types';
import {CodedError, Telemetry} from '@react-native-windows/telemetry';

import {
Expand All @@ -30,7 +30,8 @@ import {
} from '../../utils/telemetryHelpers';
import {copyAndReplaceWithChangedCallback} from '../../generator-common';
import * as nameHelpers from '../../utils/nameHelpers';
import {InitOptions, initOptions} from './initWindowsOptions';
import type {InitOptions} from './initWindowsOptions';
import {initOptions} from './initWindowsOptions';

export interface TemplateFileMapping {
from: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* @format
*/

import {CommandOption} from '@react-native-community/cli-types';
import type {CommandOption} from '@react-native-community/cli-types';

export interface InitOptions {
logging?: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import fs from '@react-native-windows/fs';
import path from 'path';

import {Telemetry, CodedError} from '@react-native-windows/telemetry';
import {Command, Config} from '@react-native-community/cli-types';
import type {Command, Config} from '@react-native-community/cli-types';

import * as build from '../../utils/build';
import chalk from 'chalk';
Expand All @@ -27,9 +27,10 @@ import {
import * as pathHelpers from '../../utils/pathHelpers';
import * as info from '../../utils/info';
import MSBuildTools from '../../utils/msbuildtools';
import {runWindowsOptions, RunWindowsOptions} from './runWindowsOptions';
import type {RunWindowsOptions} from './runWindowsOptions';
import {runWindowsOptions} from './runWindowsOptions';
import {autolinkWindowsInternal} from '../autolinkWindows/autolinkWindows';
import {AutoLinkOptions} from '../autolinkWindows/autolinkWindowsOptions';
import type {AutoLinkOptions} from '../autolinkWindows/autolinkWindowsOptions';

/**
* Sanitizes the given option for telemetry.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* @format
*/

import {CommandOption} from '@react-native-community/cli-types';
import type {CommandOption} from '@react-native-community/cli-types';
import {deviceArchitecture} from '@react-native-windows/telemetry';

export type BuildArch = 'x86' | 'x64' | 'ARM64';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -478,11 +478,11 @@ export async function installScriptsAndDependencies(options: {

// We add an exclusionList from metro config. This will be hoisted, but add
// an explicit dep because we require it directly.
const cliPackage = await findPackage('@react-native-community/cli', {
const rnMetroConfigPacakge = await findPackage('@react-native/metro-config', {
searchPath: rnPackage.path,
});
const metroConfigPackage = await findPackage('metro-config', {
searchPath: cliPackage?.path || rnPackage.path,
searchPath: rnMetroConfigPacakge?.path || rnPackage.path,
});

if (metroConfigPackage) {
Expand Down
4 changes: 2 additions & 2 deletions packages/@react-native-windows/cli/src/utils/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ import path from 'path';
import MSBuildTools from './msbuildtools';
import Version from './version';
import {newError, newWarn} from './commandWithProgress';
import {
import type {
RunWindowsOptions,
BuildConfig,
BuildArch,
} from '../commands/runWindows/runWindowsOptions';
import {Config} from '@react-native-community/cli-types';
import type {Config} from '@react-native-community/cli-types';
import {CodedError} from '@react-native-windows/telemetry';

export async function buildSolution(
Expand Down
4 changes: 2 additions & 2 deletions packages/@react-native-windows/cli/src/utils/deploy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ import {
RunWindowsOptions,
} from '../commands/runWindows/runWindowsOptions';
import MSBuildTools from './msbuildtools';
import {Config} from '@react-native-community/cli-types';
import type {Config} from '@react-native-community/cli-types';
import * as configUtils from '../commands/config/configUtils';
import {WindowsProjectConfig} from '../commands/config/projectConfig';
import type {WindowsProjectConfig} from '../commands/config/projectConfig';
import {CodedError} from '@react-native-windows/telemetry';
import Version from './version';

Expand Down
26 changes: 0 additions & 26 deletions packages/@react-native-windows/cli/src/utils/pathHelpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,10 @@

import path from 'path';

export function resolveRnRoot(paths: string | string[] | undefined): string {
return path.dirname(
require.resolve('react-native/package.json', {
paths: typeof paths === 'string' ? [paths] : paths,
}),
);
}

export function resolveRnCliRoot(paths: string | string[] | undefined): string {
return path.dirname(
require.resolve('@react-native-community/cli/package.json', {
paths: typeof paths === 'string' ? [paths] : paths,
}),
);
}

export function resolveRnwRoot(paths: string | string[] | undefined): string {
return path.dirname(
require.resolve('react-native-windows/package.json', {
paths: typeof paths === 'string' ? [paths] : paths,
}),
);
}

export function resolveRnwCliRoot(
paths: string | string[] | undefined,
): string {
return path.dirname(
require.resolve('@react-native-windows/cli/package.json', {
paths: typeof paths === 'string' ? [paths] : paths,
}),
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import {camelCase} from 'lodash';

import {
import type {
Config,
CommandOption,
OptionValue,
Expand Down
Loading