npm init -y
- public -> static file (img, logo, favicon, manifest.json, etc)
- src -> react component & styles
https://developer.chrome.com/docs/extensions/mv3/getstarted/development-basics/
- Copy available
manifest.json
code & paste on manifest.json inpublic
folder
"default_popup": "popup.html"
- add id as react target element
npm install react react-dom
- create in src folder
popup.jsx
- write base app react code
npm install -D webpack webpack-cli
- create
webpack.config.js
at root levet - write webpack code
const path = require('path');
module.exports = {
entry: {
popup: './src/popup.jsx',
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js'
}
}
- create build script on
package.json
"build": "webpack --config webpack.config.js"
- add module code in the webpack.config.js
module: {
rules: [{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: ['@babel/preset-env, @babel/preset-react']
}
}],
},
- install @babel/preset-env, @babel/preset-react
npm install -D babel-loader @babel/core @babel/preset-env @babel/preset-react
- install html webpack plugin
npm install -D html-webpack-plugin
- add plugin code on webpack config to generate html file on build dir
plugins: [new HtmlWebpackPlugin({
template: './src/popup.html',
filename: 'popup.html'
})],
- install copy webpack plugins for copy-paste inside spesific folder to build dir
npm install -D copy-webpack-plugin
- Add copy plugin code to webpack config
new CopyPlugin({
patterns: [
{ from: "public", to: "dest" }
],
}),
- run
npm run build
& themanifest.json
is available
- Open
chrome://extensions
- Active the
developer mode
- Click
Load unpacked
- Select
dist
folder
- Copy extension ID
- visit
chrome-extension://<extension-ID>/popup.html
- Install
npm install -D webpack-merge
- Create
webpack.prod.js
&webpack.dev.js
- Add code on
webpack.dev.js
const { merge } = require('webpack-merge');
const config = require('./webpack.config.js');
module.exports = merge(config, {
mode: 'development',
devtool: 'inline-source-map'
});
- Add code on
webpack.prod.js
const { merge } = require('webpack-merge');
const config = require('./webpack.config.js');
module.exports = merge(config, {
mode: 'production'
});
- add dev script on package.json
"dev": "webpack --watch --config webpack.dev.js"
- run
npm run dev
so webpack will re-build everytime changes on code