Using React and redux to build a browser extension - reactjs

I'm building a fairly complex browser extension for a client and it occurred to me that I could leverage Redux in the backend scripts to simplify the overall information flow, as well as using React in the UI, and modern javascript in the content scripts I need.
I've got a basic extension working, by building the background and content scripts in separate build steps. My src folder looks like:
src/
background/
index.js (and other js files)
content/
index.js (and other js files)
toolbar/ (shows intro text and a button to display prefs - see webpage below)
toolbar.html
App.js
App.css
components/ (etc)
webpage/ (displays the UI elements for use prefs etc)
webpage.html
App.js
App.css
components/ (etc)
common/
index.js (etc - common logic used by both toolbar, webpage, content and background.)
Right now I am building each subfolder independently via scripts in package.json
"scripts": {
"prebuild": "rimraf build",
"build": "yarn build:app && yarn build:bg && && yarn build:cont",
"build:app": "INLINE_RUNTIME_CHUNK=false react-scripts build",
"build:bg": "webpack --mode production ./src/background --output ./build/background.js",
"build:cont": "webpack --mode production ./src/content --output ./build/content.js",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
but the build:app step by default seems to also build everything that's in src/ so the background, content etc stuff gets duplicated and the html in the subfolders is unused.
Is there a way to tell create-react-app's webpack config to build these all to suit the needs of my extension without ejecting?

Related

How to rename 'index.js' file in React File structure to something else?

In the React file structure under components there is index.js file that runs the main character when running the project. Is there anyway to rename this file to any name I want? I am using PM2 server manager and there is no way for me to keep track which server is which when running multiple index.js files. So the only option I got is to rename this index.js to something specific to each project.
I have tried changing the package.json file's start script as below but nothing worked out only gave errors.
"scripts": {
"start": "test.js react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
}
Appreciate all your help!
You can't change the name of the file used by create-react-path.
You'll have to either eject to use custom webpack config by running
npm run eject
But it's a one-way operation (see documentation)
Or you can use Vite instead of create-react-app to bundle your project.
Vite is more configurable than create-react-app, you define in the index.html the name of your js file. So you can put any name you want.
Maybe even this example could help you:
https://vitejs.dev/guide/ssr.html#example-projects

How to Host two react js application on single application pool?

I am trying to host two react applications under Default Web site in IIS?
ex. if the domain is test.com
The URL for both sites is like
test.com/React1
test.com/React2
Image 1
Image 2
Image 3
Image 4
Image 5
If we refresh the Page in Image 4 we get the following.
If you want to deploy the react app as sub-application in iis then you need to do below settings:
Convert all absolute links to relative ones.
<link href="/static/css/main.584f321a.chunk.css" rel="stylesheet">
to
<link href="./static/css/main.584f321a.chunk.css" rel="stylesheet">
if you are using yarn to build your app. You have to add two things in your package.json file.
First add the homepage value into package.json at the same level of name value
{
"name": "...",
"version": "...",
"hompage" : "/SitePrefix"
...
}
In your case you have 2 sites testweb1 and testweb2. So, you have to change /SitePrefix by /testweb1 or /testweb2 in their package.json respectively. Then add a command to compile your project so You have to set de variable PUBLIC_URL (it appears at index.html file of public folder like %PUBLIC_URL%). You must change the value of that variable to be overwritten in the final index.html file. so add the build-prod-env command in your package.json
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"build-prod-env": "set PUBLIC_URL=/testweb1&&yarn build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
Don't add spaces between /testweb1 and && because it is going to affect your compile process. Publish your app and do the same with the other page changing the PUBLIC_URL variable.

How to prevent npm run build from deleting directories in build

I have a SPA react app to host my personal projects. The layout is created with react, but each personal project is a directory with normal index.html, .js, and .css files.
I couldn't figure out how to successfully use <Link> to render the regular .html pages on click, so I'm taking the easy route for now: manually moving each directory into build, then linking to it with .
This works, but every time I rerun npm run build it erases all of my project directories. How can I prevent this behavior? (I'm using create-react-app with defaults).
tl;dr: How to tell npm run build not to delete certain directories inside build.
Build folder should be cleaned up on each build. This is best practice so your project can be build by different developers, having only source code.
To achive your task you should use additional npm script which will be automatically run after build. (You may see all possible stages when scripts can be run here)
postbuild script should copy additional files from some path under src folder to build folder. So on each build you'll have all required files in place
Example
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"postbuild": "copy .\\src\\app.js .\\build\\app.js"
},
Last line will copy app.js from src folder to build folder. The same way you can create script to recreate all required directories after each build.

cannot remove the source maps from react project

I want to disable the source maps so that my code will not appear in the deployment link source. As you will see on the screenshot I changed the build and I created .env file but still it does not work and the code is still visible. Also the .env file won't be committed and it says Untracked Files.
Try removing map files after a build.
"scripts": {
...
"build": "react-scripts build",
"postbuild": "rimraf build/**/*.map"
...
}
I replace the current "build" with "build": "react-scripts build && rm build/static/js/*.map && rm build/static/css/*.map" and it works. I twill remove the js and css from the sources.

How to deploy React app (create-react-app) to Back4App?

I've created an React app with create-react-app and I want to deploy it to Back4App.
The problem is I want to deploy the build folder and not the public folder (which I understand is the default for Back4App / ParsePlatform).
So far, I haven't found any way to config deploy to use anything other than the public folder.
Any solution / workaround to this?
If you are using B4A CLI, one of the easiest ways to deploy a create-react-app is, firstly, changing the build script into your package.json as below snippet:
...
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build && cp -r build/* {{PATH-TO-YOUR-B4A-APP}}/public",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
...
As you can see, you just need to move all content inside create-react-app build folder to the public folder of your cloud code. After that, move to your app path and run b4a deploy.
Also, you could add a step to clear all public folder content before move the new stuff, but be careful with this step.
Otherwise, you could access the Back4app Parse-Dashboard into the Cloud Code Functions and deploy all the build stuff in public folder using the browser interface.
This is a live demo of a create-react-app deployed in Back4App.

Resources