You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中Vite编译JS资源部署至AWS S3遇CORS错误求助

解决Laravel 9 + Vite部署到AWS S3后的JS文件CORS错误

核心问题

你遇到的CORS错误并非来自Vite配置或桶策略,而是S3存储桶未配置CORS规则——桶策略仅控制AWS资源的访问权限,而浏览器层面的跨域请求需要单独配置CORS规则。CSS文件正常是因为部分浏览器对静态资源的CORS校验更宽松,而JS模块的导入/动态加载会严格触发CORS校验。

解决方案步骤

1. 配置S3存储桶的CORS规则

登录AWS控制台,找到目标存储桶:

  • 进入「权限」标签页
  • 找到「跨域资源共享(CORS)」模块,点击「编辑」
  • 添加以下规则(可根据需求限制来源域名):
[
    {
        "AllowedHeaders": ["*"],
        "AllowedMethods": ["GET", "HEAD"],
        "AllowedOrigins": ["*"],
        "ExposeHeaders": []
    }
]
  • 若需限制特定域名,将"*"替换为你的应用域名,例如["https://your-production-domain.com"]

2. 验证S3文件的ACL权限

执行同步命令后,确认JS文件在S3上的权限为public-read:

  • 在S3控制台找到目标JS文件,查看「权限」中的「对象所有权」和「访问控制列表」,确保允许公共读取

3. 清理无效的Vite配置

你添加的server.cors: true仅作用于本地开发服务器,部署到生产环境后完全无效,可从vite.config.js中移除该配置:

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import vue from '@vitejs/plugin-vue';

export default defineConfig({
    plugins: [
        laravel({
            input: 'resources/js/app.js',
            refresh: true,
        }),
        vue({
            template: {
                transformAssetUrls: {
                    base: null,
                    includeAbsolute: false,
                },
            },
        }),
    ],
});

4. 清除浏览器缓存

浏览器可能缓存了旧的CORS响应头,强制刷新页面(Ctrl+Shift+R或Cmd+Shift+R)后重新测试。

额外排查点

  • 查看浏览器控制台的具体CORS错误信息,比如是否提示Access-Control-Allow-Origin缺失,或请求方法不被允许,可针对性调整CORS规则
  • 确认ASSET_URL配置正确,同步S3时未遗漏JS文件

内容的提问来源于stack exchange,提问作者Nitish Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:24:52