rnx-kit/packages/cli
renovate[bot] 57013d2191
fix(deps): update eslint (major) (#3394)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com>
2024-10-17 14:41:52 +00:00
..
bin feat(cli)!: introduce standalone `rnx-cli` (#3244) 2024-08-13 18:30:17 +02:00
scripts fix(align-deps): update profiles for `react-native-macos` 0.74 (#3294) 2024-08-14 19:18:29 +02:00
src feat(cli): add Ccache support (#3375) 2024-10-02 08:56:08 +02:00
test fix(align-deps): move Commander config from `rnx-cli` (#3336) 2024-09-10 17:03:07 +02:00
CHANGELOG.md RELEASING: Releasing 4 package(s) (#3369) 2024-10-07 09:32:52 +02:00
README.md docs(cli): add build/run docs (#3347) 2024-09-13 10:25:09 +02:00
eslint.config.js chore: migrate to ESLint flat config (#2782) 2023-11-03 14:02:18 +01:00
package.json fix(deps): update eslint (major) (#3394) 2024-10-17 14:41:52 +00:00
react-native.config.js fix(cli): export `react-native.config.js` for simpler forwarding (#2777) 2023-11-01 16:11:58 +01:00
tsconfig.json feat(tools-apple): add primitives for build and run commands (#3305) 2024-08-28 11:19:40 +02:00

README.md

@rnx-kit/cli

Build npm version

Command-line interface for working with packages in your repo.

[!NOTE]

All commands below are also a plugin to @react-native-community/cli, meaning they will work with both react-native and rnc-cli commands. Just make sure to prefix the command with rnx- e.g., rnx-cli start becomes react-native rnx-start. The prefix is to avoid name clashes.

rnx-cli bundle

Bundle a package using Metro. The bundling process uses optional configuration parameters and command-line overrides.

[!NOTE]

This command is meant to be a drop-in replacement for react-native bundle. If rnx-bundle ever becomes widely accepted, we will work on upstreaming it to @react-native-community/cli, along with supporting libraries for package configuration and Metro plugins.

Example Usages

yarn rnx-cli bundle
yarn rnx-cli bundle                \
    --entry-file src/index.ts      \
    --bundle-output main.jsbundle  \
    --platform ios                 \
    --dev false                    \
    --minify true

Example Configuration (Optional)

{
  "rnx-kit": {
    "bundle": {
      "entryFile": "entry.js",
      "assetsDest": "dist",
      "plugins": [
        "@rnx-kit/metro-plugin-cyclic-dependencies-detector",
        [
          "@rnx-kit/metro-plugin-duplicates-checker",
          { "ignoredModules": ["react-is"] }
        ],
        "@rnx-kit/metro-plugin-typescript"
      ],
      "targets": ["android", "ios", "macos", "windows"],
      "platforms": {
        "android": {
          "assetsDest": "dist/res"
        },
        "macos": {
          "plugins": [
            "@rnx-kit/metro-plugin-cyclic-dependencies-detector",
            [
              "@rnx-kit/metro-plugin-duplicates-checker",
              { "ignoredModules": ["react-is"] }
            ]
          ]
        }
      }
    }
  }
}

Bundle Defaults

When certain parameters aren't specified in configuration or on the command-line, they are explicitly set to default values.

Parameter Default Value
entryFile "index.js"
bundleOutput "index.<platform>.bundle" (Windows, Android) or "index.<platform>.jsbundle" (iOS, macOS)
hermes false
treeShake false
plugins ["@rnx-kit/metro-plugin-cyclic-dependencies-detector", "@rnx-kit/metro-plugin-duplicates-checker", "@rnx-kit/metro-plugin-typescript"]

Other parameters have implicit defaults, buried deep in Metro or its dependencies.

Command-Line Overrides

Option Description
--id <id> Target bundle definition; only needed when the rnx-kit configuration has multiple bundle definitions
--entry-file <path> Path to the root JavaScript or TypeScript file, either absolute or relative to the package
--platform <ios|android|windows|win32|macos> Target platform; when unspecified, all platforms in the rnx-kit configuration are bundled
--dev [boolean] If false, warnings are disabled and the bundle is minified
--minify [boolean] Controls whether or not the bundle is minified (useful for test builds)
--bundle-output <string> Path to the output bundle file, either absolute or relative to the package
--bundle-encoding <utf8|utf16le|ascii> Character encoding to use when writing the bundle file
--max-workers <number> Specifies the maximum number of parallel worker threads to use for transforming files; defaults to the number of cores available on your machine
--sourcemap-output <string> Path where the bundle source map is written, either absolute or relative to the package
--sourcemap-sources-root <string> Path to use when relativizing file entries in the bundle source map
--sourcemap-use-absolute-path Report SourceMapURL using its full path
--assets-dest <path> Path where bundle assets like images are written, either absolute or relative to the package; if unspecified, assets are ignored
--unstable-transform-profile <string> [Experimental] Transform JS for a specific JS engine; currently supported: hermes, hermes-canary, default
--reset-cache Reset the Metro cache
--config <string> Path to the Metro configuration file
--tree-shake [boolean] Enable tree shaking to remove unused code and reduce the bundle size

rnx-cli start

Start a bundle server for a package using Metro. The bundle server uses optional configuration parameters and command-line overrides.

[!NOTE]

This command is meant to be a drop-in replacement for react-native start. If rnx-start ever becomes widely accepted, we will work on upstreaming it to @react-native-community/cli, along with supporting libraries for package configuration and Metro plugins.

Example Commands

yarn rnx-cli start
yarn rnx-cli start --host 127.0.0.1 --port 8812

Example Configuration

{
  "rnx-kit": {
    "server": {
      "projectRoot": "src",
      "plugins": [
        "@rnx-kit/metro-plugin-cyclic-dependencies-detector",
        [
          "@rnx-kit/metro-plugin-duplicates-checker",
          {
            "ignoredModules": ["react-is"],
            "throwOnError": false
          }
        ],
        "@rnx-kit/metro-plugin-typescript"
      ]
    }
  }
}

Server Defaults

If the server configuration is not defined, it is implicitly created at runtime from the bundle configuration (or its defaults).

Command-Line Overrides

Option Description
--port <number> Host port to use when listening for incoming server requests
--host <string> Host name or address to bind when listening for incoming server requests; when not specified, requests from all addresses are accepted
--project-root <path> Path to the root of your react-native project; the bundle server uses this path to resolve all web requests
--watch-folders <paths> Additional folders which will be added to the watched files list, comma-separated; by default, Metro watches all project files
--asset-plugins <list> Additional asset plugins to be used by Metro's Babel transformer; comma-separated list containing plugin module names or absolute paths to plugin packages
--source-exts <list> Additional source file extensions to include when generating bundles; comma-separated list, excluding the leading dot
--max-workers <number> Specifies the maximum number of parallel worker threads to use for transforming files; defaults to the number of cores available on your machine
--reset-cache Reset the Metro cache
--custom-log-reporter-path <string> Path to a JavaScript file which exports a Metro 'TerminalReporter' function; replaces the default reporter that writes all messages to the Metro console
--https Use a secure (https) web server; when not specified, an insecure (http) web server is used
--key <path> Path to a custom SSL private key file to use for secure (https) communication
--cert <path> Path to a custom SSL certificate file to use for secure (https) communication
--config <string> Path to the Metro configuration file
--no-interactive Disables interactive mode
--id <string> Specify which bundle configuration to use if server configuration is missing

rnx-cli build

Builds the native bits in your project.

yarn rnx-cli build [options]
Option Description
-p, --platform <string> Target platform
--workspace <string> Path, relative to project root, of the Xcode workspace to build (macOS only)
--scheme <string> Name of scheme to build (Apple platforms only)
--configuration <string> Build configuration for building the app; 'Debug' or 'Release'
--destination <string> Destination of the built app; 'device', 'emulator', or 'simulator'

Example Commands

yarn rnx-cli build -p ios

rnx-cli run

Launches the native app (building it first if necessary).

yarn rnx-cli run [options]
Option Description
-p, --platform <string> Target platform
--workspace <string> Path, relative to project root, of the Xcode workspace to build (macOS only)
--scheme <string> Name of scheme to build (Apple platforms only)
--configuration <string> Build configuration for building the app; 'Debug' or 'Release'
--destination <string> Destination of the built app; 'device', 'emulator', or 'simulator'
-d, --device <string> The name of the device to launch the app in

Example Commands

yarn rnx-cli run -p ios

rnx-cli align-deps

Manage dependencies within a repository and across many repositories.

yarn rnx-cli align-deps [options] [/path/to/package.json]

Refer to @rnx-kit/align-deps for details.

rnx-cli clean

Cleans your project by removing React Native related caches and modules.

yarn rnx-cli clean [options]
Option Description
--include <android,cocoapods,metro,npm,watchman,yarn> Comma-separated flag of caches to clear e.g., npm,yarn
--project-root <path> Root path to your React Native project
--verify-cache Whether to verify the integrity of the cache

rnx-cli write-third-party-notices

Generate a third-party notice, an aggregation of all the LICENSE files from your package's dependencies.

[!NOTE]

A third-party notice is a legal document. You are solely responsble for its content, even if you use this command to assist you in generating it. You should consult with an attorney to ensure your notice meets all legal requirements.

yarn rnx-cli write-third-party-notices [options]
Option Description
--root-path <path> The root of the repo to start resolving modules from
--source-map-file <path> The source map file to generate license contents for
--json Output license information as a JSON
--output-file <path> The output file to write the license file to
--ignore-scopes <string> npm scopes to ignore and not emit license information for
--ignore-modules <string> Modules (JS packages) to not emit license information for
--preamble-text <string> A list of lines to prepend at the start of the generated license file
--additional-text <string> A list of lines to append at the end of the generated license file
--full-license-text Include full license text in the JSON output

Other Commands

The following commands route to @react-native-community/cli: