/create-react-extension

Set up a modern React browser extension by running one command.

Primary LanguageJavaScriptMIT LicenseMIT

Create-React-Extension PRs Welcome

Create React browser extensions with no build configuration.

This is a fork of create-react-app to make creating Browser Extensions in React more accessible and following Create-React-App's(CRA) philosophy, especially convention over configuration.

Features

see Create a browser extension for a more in depth start guide see CRA user guide for more information on different configurations and functionality available.

If something doesn’t work, please file an issue.

Quick Overview

npx create-react-app my-browser-extension --scripts-version react-browser-extension-scripts --template browser-extension
cd my-browser-extension
npm start

If you've previously installed create-react-app globally via npm install -g create-react-app, we recommend you uninstall the package using npm uninstall -g create-react-app to ensure that npx always uses the latest version.

(npx comes with npm 5.2+ and higher, see instructions for older npm versions)

Then open Chrome, and unpack the newly created /dev folder to see your extension added locally to your browser.
When you’re ready to ship your extension, create an optimized build with npm run build.

npm start

What do I need to know to start building my extension ?

It follows mostly the same conventions as CRA.

Only 1 new convention

There are different types of chrome extensions which can be any combination of:

  • Popup UI which renders your index.js when you click on your extension in the browser extension icon.
  • Background script which will run in the background from /background/index.js and can be use for things like state-management.
  • Content script from /contentScript/index.js which will run on configured web pages
  • Options UI which renders your /options/ when you click on your extension in the browser extension icon.
  • Dev tools page ❎ Does not support yet

These are all controlled by the all important /public/manifest.json which is configurable by you to control what kind of extension you want build.

Do not delete any of the entry files, this is a convention to remind you what your extensions could be. The build will notify you and fail if you remove any of these important files.

Creating a Browser Extension

You’ll need to have Node 10.16.0 or later version on your local development machine (but it’s not required on the server). We recommend using the latest LTS version. You can use nvm (macOS/Linux) or nvm-windows to switch Node versions between different projects.

To create a new browser extension, you may choose one of the following methods:

npx

npx create-react-app my-browser-extension --scripts-version react-browser-extension-scripts --template browser-extension

(npx is a package runner tool that comes with npm 5.2+ and higher, see instructions for older npm versions)

npm

npm init react-app my-browser-extension --scripts-version react-browser-extension-scripts --template browser-extension

npm init <initializer> is available in npm 6+

Yarn

yarn create react-app my-browser-extension --scripts-version react-browser-extension-scripts --template browser-extension

yarn create <starter-kit-package> is available in Yarn 0.25+

It will create a directory called my-browser-extension inside the current folder.
Inside that directory, it will generate the initial project structure and install the transitive dependencies:

my-browser-extension
├── README.md
├── node_modules
├── package.json
├── .gitignore
├── public
│   ├── img
│   │   ├── icon-16.png
│   │   ├── icon-48.png
│   │   ├── icon-128.png
│   ├── popup.html
│   ├── options.html
│   └── manifest.json
└── src
    ├── background
    │   ├── index.js
    ├── contentScripts
    │   ├── index.js
    ├── options
    │   ├── index.js
    │   ├── Options.js
    ├── App.css
    ├── App.js
    ├── App.test.js
    ├── index.css
    ├── index.js
    ├── logo.svg

No configuration or complicated folder structures, only the files you need to build your extension.
Once the installation is done, you can open your project folder:

cd my-browser-extension

Inside the newly created project, you can run some built-in commands:

npm start or yarn start

Runs the browser extension in development mode. You will see a /dev folder has been created in your project with the extension.

To view the extension in your browser, open up chrome and unpack extension.

The extension will automatically reload if you make changes to the code.
You will see the build errors and lint warnings in the console.

Build errors

npm test or yarn test

Runs the test watcher in an interactive mode.
By default, runs tests related to files changed since the last commit.

Read more about testing.

npm run build or yarn build

Builds the app for production to the build folder.
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.

Your app is ready to be deployed.

User Guide

You can find detailed instructions on using Create React App and many tips in its documentation.

How to Update to New Versions?

Please refer to the User Guide for this and other information.

Philosophy

  • One Dependency: There is only one build dependency. It uses webpack, Babel, ESLint, and other amazing projects, but provides a cohesive curated experience on top of them.

  • No Configuration Required: You don't need to configure anything. A reasonably good configuration of both development and production builds is handled for you so you can focus on writing code.

  • No Lock-In: You can “eject” to a custom setup at any time. Run a single command, and all the configuration and build dependencies will be moved directly into your project, so you can pick up right where you left off.

What’s Included?

Your environment will have everything you need to build a modern single-page React app:

  • React, JSX, ES6, TypeScript and Flow syntax support.
  • Language extras beyond ES6 like the object spread operator.
  • Autoprefixed CSS, so you don’t need -webkit- or other prefixes.
  • A fast interactive unit test runner with built-in support for coverage reporting.
  • A live development server that warns about common mistakes.
  • A build script to bundle JS, CSS, and images for production, with hashes and sourcemaps.
  • An offline-first service worker and a web app manifest, meeting all the Progressive Web App criteria. (Note: Using the service worker is opt-in as of react-scripts@2.0.0 and higher)
  • Hassle-free updates for the above tools with a single dependency.

Check out this guide for an overview of how these tools fit together.

The tradeoff is that these tools are preconfigured to work in a specific way. If your project needs more customization, you can "eject" and customize it, but then you will need to maintain this configuration.

Check out this awesome browser extensions list for more great packages to help you create a great web extension

Contributing

We'd love to have your helping hand on create-react-extension! See CONTRIBUTING.md for more information on what we're looking for and how to get started.

Acknowledgements

We are grateful to everyone who has been a part of the following existing related projects for their ideas and collaboration:

License

Create React Extension is open source software licensed as MIT.