fix(macos-init): improve init flow and drop chalk dependency#2858
Conversation
|
- Remove redundant dependency install (generate-macos.js was running npm i/yarn after cli.ts already installed react-native-macos) - Show npm/yarn errors on install failure instead of hiding them with --silent flag - Validate peer dependencies before install and warn on mismatch - Auto-run pod install after template generation (non-fatal on failure) - Fix finish message: remove nonexistent yarn start:macos, show correct npx react-native run-macos and npx react-native start commands Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
b1485c1 to
fc29974
Compare
|
@copilot update the engines field in the react-native-macos-init package json per the below comment, and update the lock file. "We need the engines field to ensure users have a recent enough version of Node for styleText" |
There was a problem hiding this comment.
Pull request overview
This PR updates the macOS initialization/generation flow to avoid redundant installs, improve install-time diagnostics, and modernize CLI output formatting by removing the chalk dependency in favor of Node’s built-in util.styleText.
Changes:
- Remove the extra
npm i/yarndependency install step from the macOS generator flow. - Improve
react-native-macos-initbehavior by validatingreact-native-macospeer deps up front and surfacing real npm/yarn error output on install failures. - Replace
chalkusage withnode:utilstyleTextand update the final “next steps” messaging.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/react-native/local-cli/generator-macos/index.js | Drops chalk, removes dependency-install helper, updates finish instructions (and now has unused requires). |
| packages/react-native/local-cli/generator-common/index.js | Replaces chalk styling with styleText in file-copy callbacks. |
| packages/react-native/local-cli/generate-macos.js | Stops calling the removed dependency-install step. |
| packages/react-native-macos-init/src/cli.ts | Removes chalk, adds peer-dep validation + improved install failure output, switches to styleText. |
| packages/react-native-macos-init/package.json | Removes chalk dependencies and adds @types/node. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
a0e9180 to
33b103e
Compare
Drop the chalk dependency in favor of Node's built-in styleText API (available since Node 20.12). Add @types/node@^22 as a devDependency for proper type resolution. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the Verdaccio-based integration test with a simpler approach that installs the local react-native-macos package directly via npm install <path>. This avoids the Verdaccio hang issue (microsoft#2344) while still testing the full init flow end-to-end: project creation, template application, pod install, and macOS build. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
33b103e to
ac862f5
Compare
…2859) ## Summary - Remove redundant dependency install (`generate-macos.js` was running `npm i`/`yarn` a second time after `cli.ts` already installed `react-native-macos`) - Show actual npm/yarn errors on install failure instead of swallowing them with `--silent` - Validate peer dependencies before install and warn on version mismatch - Fix finish message: remove nonexistent `yarn start:macos`, show correct `pod install`, `npx react-native run-macos` and `npx react-native start` - Replace `chalk` with Node's built-in `node:util` `styleText` (available since Node 20.12), add `engines.node` field - Re-enable integration test CI without Verdaccio (fixes #2344) — installs local package directly via `npm install <path>` ## Motivation Users hitting `npx react-native-macos-init` frequently encounter silent failures from peer dependency mismatches (e.g. `react-native-macos@0.81.4` requires `react-native@0.81.6` exactly, but `--version 0.81` installs the latest patch). The `--silent` flag hid the actual error. The finish message referenced a nonexistent `yarn start:macos` script. Addresses the same root issue as #2785 and #2793 but with a broader fix. Backport of #2858. ## Test plan - [x] Created a new project with `npx @react-native-community/cli init testapp --version 0.81.6` - [x] Ran modified init — happy path: no peer dep warning, correct finish message - [x] Tested mismatch path (`react-native@0.81.5` vs required `0.81.6`) — warning fires before install with clear message - [x] TypeScript compiles cleanly - [x] Re-enabled CI integration test (no longer depends on Verdaccio) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Summary
generate-macos.jswas runningnpm i/yarna second time aftercli.tsalready installedreact-native-macos)--silentyarn start:macos, show correctpod install,npx react-native run-macosandnpx react-native startchalkwith Node's built-innode:utilstyleText(available since Node 20.12), addengines.nodefieldnpm install <path>Motivation
Users hitting
npx react-native-macos-initfrequently encounter silent failures from peer dependency mismatches (e.g.react-native-macos@0.81.4requiresreact-native@0.81.6exactly, but--version 0.81installs the latest patch). The--silentflag hid the actual error. The finish message referenced a nonexistentyarn start:macosscript.Addresses the same root issue as #2785 and #2793 but with a broader fix.
Test plan
npx @react-native-community/cli init testapp --version 0.81.6react-native@0.81.5vs required0.81.6) — warning fires before install with clear message🤖 Generated with Claude Code