- Published on
Create your own Create React App template
Overview
If you don't like the default scaffold of Create React App it is really easy to adjust.
- Make it your own
- Inside the template folder create a src folder and an index.tsx in it
- Inside the template/src folder create a App.tsx file.
- Test that your scaffold is working locally by running
- Finished code
- Publish to npm
- Use your published template in a project
Make it your own
If you don't like the default scaffold of create react app it really easy to adjust.
-
Start by creating a folder called
cra-template
. -
Cd into the folder and run
yarn init -y
ornpm init -y
if your prefer npm. This will generate a basicpackage.json
file for you. -
Create a
template.json
with your specific template settings. Any dependencies you add here will be added to the final dependency list.
{
"package": {
"dependencies": {
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"web-vitals": "^1.0.1"
},
"eslintConfig": {
"extends": ["react-app", "react-app/jest"]
}
}
}
-
Create a
template
folder. -
Inside the
template
folder create agitignore
file with the content below. Make sure to omit the dot.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
- Inside the
template
folder create apublic
folder with the followingindex.html
.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="Web site created using create-react-app" />
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<title>CRA template</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>
Inside the template folder create a src folder and an index.tsx in it
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
)
Inside the template/src folder create a App.tsx file.
import React from 'react'
const App = () => {
return <div>My CRA template</div>
}
export default App
Test that your scaffold is working locally by running
npx create-react-app my-app --template file:.
Finished code
Should look something like this
Publish to npm
npm publish
Use your published template in a project
npx create-react-app my-app --template your-template-name
npx create-react-app my-app --template barebones