Vercel部署Express.js后assetsDash静态目录下.js文件无法访问问题
问题根因
- Vercel(原Now)平台V2版本的默认构建规则会优先将.js后缀的文件识别为服务端函数处理,不会走你在Express中配置的static静态资源路由
- 你当前now.json里的
{"handle": "filesystem"}规则会优先匹配根目录下的.js文件,要么直接返回404,要么触发函数调用错误,不会转发到index.js的Express服务处理
解决方案
步骤1:调整now.json配置,提升静态资源路由优先级
在路由规则最前面添加静态资源专属匹配规则,同时配置构建规则标记静态资源目录,避免平台把目录内的JS文件识别为服务端函数,修改后的配置如下:
{ "version": 2, "builds": [{ "src": "./index.js", "use": "@now/node-server" }, { "src": "dash/assets/**/*", "use": "@now/static" }, { "src": "landing/assets/**/*", "use": "@now/static" }], "routes": [ { "src": "/assetsDash/(.*)", "dest": "/dash/assets/$1" }, { "src": "/assetsLanding/(.*)", "dest": "/landing/assets/$1" }, {"handle": "filesystem"}, { "src": "/.*", "dest": "index.js" } ] }
步骤2:确认静态资源目录被纳入构建产物
检查项目根目录的.gitignore和.vercelignore文件,不要把dash/、landing/目录排除在构建上传范围之外。
步骤3(可选优化)
可以直接删除Express代码中app.use开头的两条静态资源配置,所有静态资源访问完全交给Vercel平台的路由规则处理,避免服务端路由和平台路由产生冲突。
修改后重新部署即可正常加载.js格式的静态资源,其他格式资源的访问逻辑不会受到影响。
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

