There are couple of ways to initialize new React Native projects.
For [email protected]
or greater
npx react-native init ProjectName
Note: If you have both
yarn
andnpm
installed on your machine, React Native CLI will always try to useyarn
, so even if you usenpx
utility, onlyreact-native
executable will be installed usingnpm
and the rest of the work will be delegated toyarn
. You can force usage ofnpm
adding--npm
flag to the command.
Note: for Yarn users,
yarn dlx
command similar tonpx
will be featured in Yarn 2.0: yarnpkg/berry#40 so we’ll be able to use it in a similar fashion.
yarn init && yarn add react-native && yarn react-native init ProjectName
# This will use the latest init command but will install react-native@VERSION and use its template
npx react-native init ProjectName --version ${VERSION}
# This will use init command from react-native@VERSION
npx react-native@${VERSION} init ProjectName
In following examples TEMPLATE_NAME
can be either:
- Full package name, eg.
react-native-template-typescript
. - Absolute path to directory containing template, eg.
file:///Users/username/project/some-template
. - Absolute path to a tarball created using
npm pack
.
# This will initialize new project using template from TEMPLATE_NAME package
npx react-native init ProjectName --template ${TEMPLATE_NAME}
# This will initialize new project using init command from react-native@VERSION but will use TEMPLATE_NAME custom template
npx react-native@${VERSION} init ProjectName --template ${TEMPLATE_NAME}
You can force usage of npm
if you have both yarn
and npm
installed on your machine:
npx react-native init ProjectName --npm
Using legacy react-native-cli
package:
yarn global add react-native-cli
react-native init ProjectName
Note: It is not recommended, but you can also use legacy
react-native-cli
package to initialize projects using latestreact-native
versions.
Every custom template needs to have configuration file called template.config.js
in the root of the project:
module.exports = {
// Placeholder name that will be replaced in package.json, index.json, android/, ios/ for a project name.
placeholderName: 'ProjectName',
// Placeholder title that will be replaced in values.xml and Info.plist with title provided by the user.
// We default this value to 'Hello App Display Name', which is default placeholder in react-native template.
titlePlaceholder: 'Hello App Display Name',
// Directory with the template which will be copied and processed by React Native CLI. Template directory should have package.json with all dependencies specified, including `react-native`.
templateDir: './template',
// Path to script, which will be executed after initialization process, but before installing all the dependencies specified in the template. This script runs as a shell script but you can change that (e.g. to Node) by using a shebang (see example custom template).
postInitScript: './script.js',
};
You can find example custom template here.