During the build process, I discovered that the dist folder is completely regenerated each time, causing confusion with AWS SYNC and resulting in re-uploading everything.
To resolve this issue, I decided to split the deployment into two separate NPM tasks. One task uploads the assets folder while the other handles the rest of the project. Below are the final commands:
1) Upload fonts and images
aws s3 sync --acl public-read dist/fonts s3://bucket/fonts
aws s3 sync --acl public-read dist/img s3://bucket/img
2) Deploy the remaining project files excluding assets
aws s3 sync --acl public-read --exclude 'fonts/*' --exclude 'img/*' dist s3://bucket
It's important to note that both the "img" and "fonts" folders are auto-generated by Vue CLI and contain all project images and fonts respectively.