网站部署到服务器后 CSS 文件加载成功,但是没有生效

博客讲述了在前端代码部署到服务器后,样式未生效的问题排查过程。首先排除了nginx配置的静态资源路径问题,然后确认了CSS文件内容无误且已被正确请求。通过检查元素发现样式匹配,但在浏览器中并未构建CSSOM。最后发现是nginx配置文件缺少了MIME类型设置,导致服务器未能正确响应content-type,从而影响了样式应用。解决方案是添加`include mime.types;`到nginx配置,确保MIME配置生效。

刚解决了一个问题,前端代码发布到服务器后,样式没有生效。

开始以为 nginx 配置的静态资源路径有问题,通过 network 发现 css 文件确实请求成功。

然后怀疑代码有问题,查看 css 文件中其中一个 dom 节点的样式,确实能匹配上(data-xxx 一致),将样式拷贝后通过 elements 看板手动添加上,样式也生效了。

文件下载成功,内容没问题,但就是没有生效,好像浏览器并没有据此构建 CSSOM(这一点也许可以通过性能调试工具查看),如此神奇的事情之前没有遇到过。

后来发现原来是 nginx 配置错误,由于配置文件是事先组织好发给运维去部署的,所以没有对其仔细进行验证,nginx 配置文件中缺少了 MIME 配置:

include       mime.types;

nginx 的 conf 目录下默认有个文件 mimx.types,包含各种 MIME 配置,内容:


types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

   ...
}

右边是文件后缀,左边是关联这个文件类型的 MIME。

服务器会根据资源文件的后缀去 types 配置中查找对应的 MIME,然后将其添加到响应头 content-type 中,这样客户端收到响应后,才会知道该如何处理它,例如 text/css 会构建 CSSOM。

部署 VuePress 项目到 GitBlit 后,尽管 CSS 文件的请求成功,但样式未生效,这种情况通常与资源路径、缓存或构建配置相关。以下是一些可能的原因和解决方案: ### 1. 检查静态资源路径配置 VuePress 默认使用 `/` 作为基础路径。如果部署到 GitBlit 的子路径下(例如 `http://example.com/my-project/`),需要在 `config.js` 中设置 `base` 选项,以确保资源路径正确。例如: ```javascript module.exports = { base: '/my-project/' } ``` 否则,CSS 文件的路径可能会不正确,导致浏览器无法正确加载样式。 ### 2. 清除浏览器缓存 浏览器可能会缓存旧的 CSS 文件,即使新文件成功加载,也可能因为缓存问题导致样式未更新。尝试清除浏览器缓存,或者使用无痕模式访问页面以验证样式是否生效。 ### 3. 检查构建输出目录 确保 VuePress 构建时正确生成了 CSS 文件,并且部署到 GitBlit 的输出目录(通常是 `.vuepress/dist`)中包含所有必要的静态资源。可以检查构建日志,确认 CSS 文件是否被正确生成并放置在 `dist` 目录中。 ### 4. 验证 HTML 文件是否正确引用 CSS 打开浏览器的开发者工具,查看 HTML 文件是否正确引用了 CSS 文件。检查 `<link>` 标签的 `href` 是否指向正确的路径,并且没有 404 错误。此外,可以查看 "Network" 面板,确认 CSS 文件是否确实被加载,并且响应内容正确。 ### 5. 使用绝对路径或 CDN 引入 CSS 如果 CSS 文件仍然无法生效,可以尝试在 VuePress 的 `config.js` 中通过 `head` 选项手动引入 CSS 文件,例如: ```javascript module.exports = { head: [ ['link', { rel: 'stylesheet', href: 'https://cdn.example.com/your-style.css' }] ] } ``` 这样可以确保 CSS 文件通过绝对路径或 CDN 加载,避免路径问题。 ### 6. 检查 GitBlit 的静态资源托管配置 GitBlit 作为静态资源托管服务器,可能需要正确配置 MIME 类型或静态文件处理方式。确保 GitBlit 正确地将 `.css` 文件作为 `text/css` 类型提供,避免因 MIME 类型错误导致浏览器不解析样式。 ### 7. 确保 VuePress 版本兼容性 如果使用的是较旧版本的 VuePress,可能存在样式加载问题。尝试升级到最新版本,确保 CSS 加载逻辑没有已知的 bug。 ### 8. 自定义 Webpack 配置 如果以上方法均无效,可以尝试通过 `vuepress/config.js` 中的 `chainWebpack` 或 `configureWebpack` 方法自定义 Webpack 配置,确保 CSS 文件被正确处理和输出。例如: ```javascript module.exports = { chainWebpack: config => { config.module .rule('css') .test(/\.css$/) .use('style-loader') .loader('style-loader') .end() .use('css-loader') .loader('css-loader') } } ``` ### 9. 检查 HTML 模板是否被修改 如果自定义了 VuePress 的 HTML 模板,确保模板中正确引用了生成的 CSS 文件。检查 `<head>` 部分是否包含正确的 `<link>` 标签,避免因模板问题导致样式未加载。 ### 10. 使用 VuePress 插件增强样式支持 某些 VuePress 插件(如 `@vuepress/plugin-css`)可以增强对 CSS 的支持,确保样式正确加载。可以尝试安装并启用相关插件: ```bash npm install @vuepress/plugin-css -D ``` 然后在 `config.js` 中启用插件: ```javascript module.exports = { plugins: ['@vuepress/plugin-css'] } ``` 通过以上方法,可以有效排查和解决 VuePress 部署到 GitBlit 后 CSS 请求成功但样式未生效的问题。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值