Vanilla HTML/CSS/JS网站部署后资源加载失败求助
问题:静态资源在Vercel/Netlify部署后无法加载
我用原生HTML、CSS、JS开发了一个多页面网站,在VS Code的Live Server上运行完全正常,但部署到Vercel和Netlify平台后,JavaScript、CSS及静态资源均无法加载。已在部署配置中指定主HTML文件路径为pages/main/html,但问题仍未解决。
主HTML代码如下:
<!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="../../../css/reset.css" /> <link rel="stylesheet" href="../../../css/main.css" /> <link rel="stylesheet" href="../css/style.css" /> <link rel="stylesheet" href="../css/media-mobile.css" /> <link href="https://db.onlinewebfonts.com/c/eceba41a00b4b94ea2965371c8dda96c?family=Bernard+MT+Condensed+V2" rel="stylesheet" /> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap" rel="stylesheet" /> <link rel="icon" type="image/png" href="../../../assets/icon.png" /> <title>Hotel AuPet</title> <style></style> </head> <body> <div class="page"> <header class="header"> <img class="fullLogo" src="../assets/header/Hotel-AuPet.png" alt="logo" /> <img class="logoName" src="../assets/header/Hotel-AuPet NOME.png" alt="logo-name" /> <img class="logoImage" src="../assets/header/Hotel-AuPet SEM NOME.png" alt="logo-img" /> <div class="info"> <h2>Viaje com tranquilidade, com o seu cão hospedado conosco</h2> </div> </header> <div class="contacts"> <div class="contact" onclick="openWindow('insta')"> <img src="../assets/icons/instagram-icon.png" alt="instagram" /> <p>hotel_aupet</p> </div> <div class="contact" onclick="openWindow('zap')"> <img src="../assets/icons/whatsapp-icon.png" alt="whatsapp" /> <p>+55 77 9180-6965</p> </div> <h3>45.700-000 Itapetinga, Bahia, Brasil</h3> <div class="pseudoHr"></div> </div> <div class="content"> <div class="carouselContainer"> <ul class="carousel"></ul> </div> <ul class="buttons"> <li onclick="navigateTo('about')"> <img src="../assets/buttons/button-sobre-nos.png" alt="button-sobre-nos" /> </li> <li onclick="navigateTo('services')"> <img src="../assets/buttons/button-serviços.png" alt="button-serviços" /> </li> <li onclick="navigateTo('instructions')"> <img src="../assets/buttons/button-instrucoes.png" alt="button-instrucoes" /> </li> <li onclick="navigateTo('guests')"> <img src="../assets/buttons/button-hospedes.png" alt="button-hospedes" /> </li> </ul> </div> <div class="contacts end"> <div class="contact" onclick="openWindow('git')"> <img src="../assets/icons/github-mark.png" alt="instagram" /> <p>Site desenvolvido por Gabriel G S Rios</p> </div> </div> </div> <script src="../script/script.js"></script> </body> </html>
解决方法
1. 替换相对路径为根路径
本地Live Server的路径解析逻辑和部署平台的服务器不同,../这类相对路径在部署后会指向错误的位置。把所有资源路径改成以/开头的根路径,直接从仓库根目录定位资源:
- 比如
../../../css/reset.css改为/css/reset.css ../assets/header/Hotel-AuPet.png改为/pages/main/assets/header/Hotel-AuPet.png(根据你的实际项目目录结构调整,确保路径准确指向资源文件)
2. 修正部署配置
- 不要把主HTML路径设为
pages/main/html,应该指向具体的HTML文件,比如pages/main/index.html - 在Vercel/Netlify的部署设置中,确认发布目录为仓库根目录(如果是多页应用,确保所有HTML文件所在目录被平台正确识别)
3. 验证目录结构
确保你的项目仓库根目录下包含css、assets、pages等文件夹,部署平台会以仓库根目录作为网站的根目录,所有根路径都会从这里开始解析。
修正后的HTML代码示例
<!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="/css/reset.css" /> <link rel="stylesheet" href="/css/main.css" /> <link rel="stylesheet" href="/pages/main/css/style.css" /> <link rel="stylesheet" href="/pages/main/css/media-mobile.css" /> <link href="https://db.onlinewebfonts.com/c/eceba41a00b4b94ea2965371c8dda96c?family=Bernard+MT+Condensed+V2" rel="stylesheet" /> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap" rel="stylesheet" /> <link rel="icon" type="image/png" href="/assets/icon.png" /> <title>Hotel AuPet</title> <style></style> </head> <body> <div class="page"> <header class="header"> <img class="fullLogo" src="/pages/main/assets/header/Hotel-AuPet.png" alt="logo" /> <img class="logoName" src="/pages/main/assets/header/Hotel-AuPet NOME.png" alt="logo-name" /> <img class="logoImage" src="/pages/main/assets/header/Hotel-AuPet SEM NOME.png" alt="logo-img" /> <div class="info"> <h2>Viaje com tranquilidade, com o seu cão hospedado conosco</h2> </div> </header> <div class="contacts"> <div class="contact" onclick="openWindow('insta')"> <img src="/pages/main/assets/icons/instagram-icon.png" alt="instagram" /> <p>hotel_aupet</p> </div> <div class="contact" onclick="openWindow('zap')"> <img src="/pages/main/assets/icons/whatsapp-icon.png" alt="whatsapp" /> <p>+55 77 9180-6965</p> </div> <h3>45.700-000 Itapetinga, Bahia, Brasil</h3> <div class="pseudoHr"></div> </div> <div class="content"> <div class="carouselContainer"> <ul class="carousel"></ul> </div> <ul class="buttons"> <li onclick="navigateTo('about')"> <img src="/pages/main/assets/buttons/button-sobre-nos.png" alt="button-sobre-nos" /> </li> <li onclick="navigateTo('services')"> <img src="/pages/main/assets/buttons/button-serviços.png" alt="button-serviços" /> </li> <li onclick="navigateTo('instructions')"> <img src="/pages/main/assets/buttons/button-instrucoes.png" alt="button-instrucoes" /> </li> <li onclick="navigateTo('guests')"> <img src="/pages/main/assets/buttons/button-hospedes.png" alt="button-hospedes" /> </li> </ul> </div> <div class="contacts end"> <div class="contact" onclick="openWindow('git')"> <img src="/pages/main/assets/icons/github-mark.png" alt="instagram" /> <p>Site desenvolvido por Gabriel G S Rios</p> </div> </div> </div> <script src="/pages/main/script/script.js"></script> </body> </html>
内容的提问来源于stack exchange,提问作者Gabriel Goes Santos Rios
相关产品推荐
相关产品推荐

