3.3.0 (2019-12-04)
v3.3.0 is a minor release that adds new features, including custom templates and support for the new optional chaining and nullish coalescing operators.
Custom Templates
You can now create a new app using custom templates.
We've published our existing templates as cra-template
and cra-template-typescript
, but we expect to see many great templates from the community over the coming weeks.
The below command shows how you can create a new app with cra-template-typescript
.
npx create-react-app my-app --template typescript
Note that you can omit the prefix cra-template-
when specifying which template you would like. For TypeScript users, we're deprecating --typescript
in favour of --template typescript
.
If you don't set a template, we'll create your new app with cra-template
- which is just a new name for our base template.
Optional Chaining and Nullish Coalescing Operators
We now support the optional chaining and nullish coalescing operators!
// Optional chaining
a?.(); // undefined if `a` is null/undefined
b?.c; // undefined if `b` is null/undefined
// Nullish coalescing
undefined ?? 'some other default'; // result: 'some other default'
null ?? 'some other default'; // result: 'some other default'
'' ?? 'some other default'; // result: ''
0 ?? 300; // result: 0
false ?? true; // result: false
If you're using TypeScript, you will need to upgrade your typescript
dependency to 3.7.0
or later if you wish to use the new operators.
If you're using Visual Studio Code 1.40 (the latest as of this release) or earlier, you will need to configure your editor if you want it to understand the new operators.
If you're using TypeScript in your project and have already upgrade its version as described above, then you can configure VS Code to Use Workspace Version
of TypeScript. If your project isn't using TypeScript, you can use the JavaScript and TypeScript Nightly extension until VS Code releases a newer version including TypeScript 3.7.0
or newer.
Numeric Separators
We've added support for numeric separators to improve readability of numeric literals.
1000000000; // Is this a billion? a hundred millions? Ten millions?
101475938.38; // what scale is this? what power of 10?
1_000_000_000; // Ah, so a billion
101_475_938.38; // And this is hundreds of millions
no-unexpected-multiline
We've removed this rule as it is not compatible with Prettier. If you rely on this rule you can re-enable it by extending our ESLint config and adding the following:
{
"extends": "react-app",
"rules": {
"no-unexpected-multiline": "warn"
}
}
🚀 New Feature
-
babel-preset-react-app
- #7438 Add optional chaining and nullish coalescing operators support (@renatoagds)
-
babel-preset-react-app
,react-dev-utils
- #7817 Add numeric separator support (@tharun208)
-
cra-template-typescript
,cra-template
,create-react-app
,react-scripts
💥 Breaking Change
-
create-react-app
,react-dev-utils
,react-scripts
-
#7988 Bump webpack-dev-server (@ianschmitz)
NOTE: This is only a breaking change if you're using
react-dev-utils
outside of Create React App.
-
🐛 Bug Fix
-
eslint-config-react-app
-
create-react-app
-
react-scripts
- #7860 Mark TypeScript as an optional peer dependency for react-scripts (@dstaley)
- #7822 Fix absolute paths issue in Jest (@rovansteen)
- #7796 Fixed process type in TypeScript template. (@fuszenecker)
-
react-dev-utils
💅 Enhancement
-
cra-template-typescript
,cra-template
- #8005 Prefix apple-touch-icon links with PUBLIC_URL (@benblank)
- #7881 Add @testing-library to the default templates (@kentcdodds)
-
react-scripts
- #7989 Add scripts support to templates (@mrmckeb)
- #7921 Add restoreMocks to supported jest config keys (@ianschmitz)
- #6352 Add additional information for postcss errors (#6282) (@buildbreakdo)
- #6753 Add Service-Worker header to checkValidServiceWorker (@darthmaim)
- #7832 feat: add additional Jest keys to whitelist (@mrmckeb)
- #7022 Fix node_modules sourcemap config (which will fix VSCode debugging of CRA apps) (@justingrant)
-
cra-template
-
create-react-app
,react-error-overlay
- #7052 Dark scheme overlay (@Fabianopb)
-
babel-preset-react-app
📝 Documentation
- Other
- #8050 Update template docs (@mrmckeb)
- #7995 Add contributors section to readme (@ianschmitz)
- #7896 chore: Fix broken link for e2e README (@haruelrovix)
- #7874 Bump docusaurus 🦖 (@andriijas)
-
#7819
📖 DOC: Improvement (@waahab) - #7853 Update adding-bootstrap.md (@Xuhao)
- #7849 chore: update README.md gif links (@cchanxzy)
- #7840 Link to ASP.NET Core docs (@Daniel15)
- #7841 Update getting-started.md (@reactjser)
- #7809 Add a note about .eslintignore files being respected (@seanlaff)
- #7686 Link to React documentation for code splitting (@Hugodby)
- #7785 Upgrade to docusaurus 2 (@endiliey)
- #7824 Fix grammar error in troubleshooting.md (@jakeboone02)
- #7823 Document correct default behavior for HOST var (@jsejcksn)
- #7815 Tightens up the TypeScript docs (@orta)
- #7813 Clarify dynamic import stage in docs (@aprilandjan)
-
react-dev-utils
,react-scripts
-
babel-preset-react-app
-
react-dev-utils
- #7897 chore: Fix broken link for CRA deployment (@haruelrovix)
-
react-scripts
🏠 Internal
-
react-scripts
- Other
-
eslint-config-react-app
- #8003 Use @typescript-eslint/no-unused-expressions to support optional chaining (@maxdavidson)
-
create-react-app
-
cra-template-typescript
-
create-react-app
,react-dev-utils
,react-scripts
- #7773 Temporarily disable Windows in CI (@ianschmitz)
🔨 Underlying Tools
-
babel-preset-react-app
,cra-template-typescript
,cra-template
,create-react-app
,react-dev-utils
,react-error-overlay
,react-scripts
- #8024 Bump dependencies (@ianschmitz)
-
create-react-app
,react-dev-utils
,react-scripts
- #7988 Bump webpack-dev-server (@ianschmitz)
- #7876 Bump styling related loaders (@andriijas)
-
react-app-polyfill
- #7999 Unpin dependencies in react-app-polyfill (@ianschmitz)
-
babel-preset-react-app
,react-app-polyfill
,react-dev-utils
,react-scripts
- #7986 Bump dependencies (@ianschmitz)
-
react-scripts
- #7956 Upgrade jest-watch-typeahead (@Andarist)
- #7870 Fix eslint complaints in build.js (@andriijas)
- #7857 feat: upgrade terser & enable parallel minification in wsl (@endiliey)
- #7856 Move unused eslint webpack import into @remove-on-eject block (@mrseanbaines)
-
babel-preset-react-app
,cra-template-typescript
,create-react-app
,react-app-polyfill
,react-dev-utils
,react-error-overlay
,react-scripts
- #7951 Fix CI (@ianschmitz)
-
react-dev-utils
- #7910 Update open (@andriijas)
-
babel-plugin-named-asset-import
,babel-preset-react-app
,react-error-overlay
,react-scripts
- #7814 Upgrade outdated packages (@andriijas)
-
react-error-overlay
,react-scripts
- #7875 Bump react (@andriijas)
Committers: 42
- Abdul Wahab
⚡ ️ (@waahab) - Alex Guerra (@heyimalex)
- Ali Waseem (@awaseem)
- Andreas Cederström (@andriijas)
- Ben Blank (@benblank)
- Brody McKee (@mrmckeb)
- Chun (@cchanxzy)
- Damian Senn (@topaxi)
- Daniel Lo Nigro (@Daniel15)
- Donavon West (@donavon)
- Dylan Staley (@dstaley)
- Endi (@endiliey)
- Fabiano Brito (@Fabianopb)
- Guillaume Hertault (@GuiHash)
- Havit Rovik (@haruelrovix)
- Hugo David-Boyet (@Hugodby)
- Ian Schmitz (@ianschmitz)
- Ian Sutherland (@iansu)
- Jake Boone (@jakeboone02)
- Jesse Jackson (@jsejcksn)
- Jonathan Felchlin (@GreenGremlin)
- Joshua Robinson (@buildbreakdo)
- Justin Grant (@justingrant)
- Kanitkorn Sujautra (@lukyth)
- Kent C. Dodds (@kentcdodds)
- Klas Björkqvist (@klasbj)
- Mateusz Burzyński (@Andarist)
- Max Davidson (@maxdavidson)
- May (@aprilandjan)
- Orta (@orta)
- RJ (@suprj)
- Renato Augusto Gama dos Santos (@renatoagds)
- Robert FUSZENECKER (@fuszenecker)
- Robert van Steen (@rovansteen)
- Sean Baines (@mrseanbaines)
- Sean Lafferty (@seanlaff)
- Tharun Rajendran (@tharun208)
- Tomáš Hübelbauer (@TomasHubelbauer)
- Wataru Ashihara (@wataash)
- Xuhao (@Xuhao)
- @reactjser
- darthmaim (@darthmaim)
Migrating from 3.2.0 to 3.3.0
Inside any created project that has not been ejected, run:
npm install --save --save-exact react-scripts@3.3.0
or
yarn add --exact react-scripts@3.3.0