Description:
I am deploying a React-based single-page application (SPA) to Vercel. The deployment completes successfully, but when accessing the site, I encounter a 404: NOT_FOUND
error.
Steps Taken to Resolve:
- Verified that the deployment URL is correct and checked DNS propagation (I am using a custom domain pointing to Vercel).
- Confirmed that the deployment exists in the Vercel dashboard and appears active.
- Reviewed the build and deployment logs, and there were no critical errors or failures during the process.
- Ensured that the correct root directory (
webapp
) and output directory (channels/dist
) were configured in the Vercel dashboard. - Added a
vercel.json
file to the root of the project with the following content to handle routing:
json
Copy code
{
"rewrites": [
{ "source": "/(.*)", "destination": "/" }
]
}
- Tested the app locally, and the build process works as expected. The output directory contains the necessary static files.
Despite these efforts, the 404 error persists. Ive tried the default build command and npm run build --workspace=channels
which chat gpt recommended I try based off my makefile:-include config.override.mk
include config.mk
# The CI environment variable is set automatically in CircleCI and GitLab CI
CI ?= false
# Detect Linux/ARM64 and set a flag to fix the issue with optipng-bin on it:
# please see optipng-bin Linux arm64 support issue (https://github.com/imagemin/optipng-bin/issues/118) for details:
ifeq ($(shell uname)/$(shell uname -m),Linux/aarch64)
LINUX_ARM64 = true
CPPFLAGS += -DPNG_ARM_NEON_OPT=0
endif
# Exact same issue but for Linux/PPC64
ifeq ($(findstring Linux/ppc64,$(shell uname)/$(shell uname -m)),Linux/ppc64)
LINUX_PPC64 = true
CPPFLAGS += -DPNG_POWERPC_VSX_OPT=0
endif
.PHONY: run
run: node_modules ## Runs app
@echo Running Mattermost Web App for development
npm run run
.PHONY: stop
stop: ## Stops webpack
@echo Stopping changes watching
ifeq ($(OS),Windows_NT)
wmic process where "Caption='node.exe' and CommandLine like '%webpack%'" call terminate
else
-@pkill -f webpack || true
endif
.PHONY: restart
restart: | stop run ## Restarts the app
.PHONY: dev
dev: node_modules ## Runs app with webpack-dev-server
npm run dev-server
.PHONY: test
test: node_modules ## Runs tests
@echo Running jest unit/component testing
npm run test
.PHONY: check-style
check-style: node_modules ## Checks JS file for ESLint confirmity
@echo Checking for style guide compliance
npm run check
.PHONY: fix-style
fix-style: node_modules ## Fix JS file ESLint issues
@echo Fixing lint issues to follow style guide
npm run fix
.PHONY: check-types
check-types: node_modules ## Checks TS file for TypeScript confirmity
@echo Checking for TypeScript compliance
npm run check-types
.PHONY: dist
dist: node_modules ## Builds all web app packages
@echo Packaging Mattermost Web App
npm run build
node_modules: package.json $(wildcard package-lock.json)
@echo Getting dependencies using npm
ifeq ($(CI),false)
CPPFLAGS="$(CPPFLAGS)" npm install
else
# This runs in CI with NODE_ENV=production which skips devDependencies without this flag
npm ci --include=dev
endif
touch $@
.PHONY: clean
clean: ## Clears cached; deletes node_modules and dist directories
@echo Cleaning Web App
npm run clean --workspaces --if-present
rm -rf node_modules
.PHONY: package
package: node_modules dist ## Generates ./mattermost-webapp.tar.gz for use by someone customizing the web app
mkdir tmp
mv channels/dist tmp/client
tar -C tmp -czf mattermost-webapp.tar.gz client
mv tmp/client channels/dist
rmdir tmp
## Help documentation à la https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
.PHONY: help
help:
@grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' ./Makefile | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'