Craco Preact Plugin
This is a craco plugin that sets up Preact for create-react-app version >= 2.
This plugin add the preact-compat
alias so that import React from 'react'
will be translated to import React from 'preact-compat'
. (preact-compat
is a drop-in replacement for React with the same API.)
Use react-app-rewired for create-react-app
version 1.
Supported Versions
craco-preact
is tested with:
preact
: ^8.3.1
preact-compat
: ^3.18.4
react-scripts
: ^2.1.1
@craco/craco
: ^2.2.3
Installation
First, follow the craco
Installation Instructions to install the craco
package, create a craco.config.js
file, and modify the scripts in your package.json
.
Then install craco-preact
:
$ yarn add craco-preact
$ npm i -S craco-preact
Usage
Here is a complete craco.config.js
configuration file that adds preact-compat
to the create-react-app
webpack config:
module.exports = {
plugins: [{ plugin: require("craco-preact") }]
};
This plugin does not have any options.
View the "Switching to Preact" Documentation.
Why did you release this as a plugin? Isn't it just adding one line to my craco
config?
Yes, it's really easy to add the preact-compat
alias to your craco.config.js
:
module.exports = {
webpack: {
alias: { react: "preact-compat", "react-dom": "preact-compat" }
}
};
However, create-react-app
, craco
, or webpack
will probably change something in the future, and then you'll have to search GitHub and StackOverflow to figure out why your app is broken.
If you are using the craco-preact
plugin, you can simply run:
$ yarn upgrade craco-preact
$ npm update craco-preact
The craco
plugin API is far less likely to change, so it will be easy to update to the latest versions of create-react-app
, webpack
, craco
, preact
, and craco-preact
. You just need to run yarn upgrade
.
Also note that craco-preact
includes preact
and preact-compat
as a dependency, so you don't need to add these libraries to your own package.json
.
The craco-preact
repository (and this README) can also serve as a central source of information for anyone who is interested in using Preact with create-react-app
. Please feel free to open an issue if you have any questions or suggestions.
FormAPI is committed to maintaining the craco-preact
plugin. We will update this plugin (and documentation) so that it works with the latest versions of react-scripts
(from create-react-app
), and craco
. Please open an issue if something breaks, and we'll fix it as soon as possible.
Should I use the preact-compat
alias?
If you are using a React component library such as Ant Design, these React components should work out of the box with the preact-compat
alias. However, Preact does not currently support some of the very latest features in React 16+, such as Hooks and Suspense. Here is the Preact GitHub issue about adding the Hooks API. Here are some more Preact issues about supporting other features in React 16+:
(We have subscribed to these issues, and will update this README if anything changes.)
If you are building a new Preact app from scratch, then you don't need any React libraries, then you don't need the craco-preact
plugin. Instead, you should follow the Preact "Getting Started" documentation.
You should still be able to use the create-react-app
webpack config with a native Preact application. Just be aware that npm install
will always install an unused copy of React, because this is a dependency of react-scripts
. This is not an issue. React will not be included in your webpack build unless you explicitly require it with an import
statement. (If you use the craco-preact
plugin, then all import 'react'
statements are translated to import 'preact'
.)
Further Configuration
If you need to configure anything else for the webpack build, take a look at the
Configuration Overview section in the craco
README. You can use CracoPreactPlugin
while making other changes to babel
and webpack
, etc.
Contributing
Install dependencies:
$ yarn install
$ npm install
Run tests:
$ yarn test
Before submitting a pull request, please check the following:
- All tests are passing
- 100% test coverage
- Coverage will be printed after running tests.
- Open the coverage results in your browser:
open coverage/lcov-report/index.html
- All code is formatted with Prettier
- Run
prettier --write **/*.js
- If you use VS Code, I recommend enabling the
formatOnSave
option.
License
MIT