Historically, the npm init command was solely use to create a new package.json file. However, as of npm version 6.1, you can now use a new feature of npm init called the . The initializer you provide will determine how your new application will be built. npm will prepend create- to the name of the initializer and it'll use npx to temporarily install and execute that project.

 

 For example, to create a react app, what you can do with npm v5.3 above is like:
npx create-react-app playground

What it does is install 'create-react-app' temporality, and use it to init a new react application called 'playground'.

 

For npm v6.1 above, you can use 'npm init' to create a new application.

npm init <initializer> can be used to set up a new or existing npm package.

initializer in this case is an npm package named create-<initializer>, which will be installed by npx, and then have its main bin executed -- presumably creating or updating package.json and running any other initialization-related operations. Link

Which means if you do:

npm init react-app playground

equals to:

npx create-react-app playground