完美解决:Hexo Next主题本地可预览CSS,但部署到网站CSS失效问题!


我的Hexo博客,欢迎访问,酷炫得一批。柯摩的BLOG

🌟 前言

  我的Hexo版本是3.9.0Next主题版本是7.5版本,也就是移除了custom文件的神奇的跨时代的版本。
  我的服务器不是github-page,而是阿里云的ECS服务器,关于如何将Hexogithub-page迁移到阿里云的ECS服务器请看这篇文章:将博客部署到阿里云服务器上
  当然一开始觉得这个版本好搓卡,本来想改改样式,不会CSS,上网搜搜就有很多改custom文件的文章,复制复制就可以改成很好看的样式,这下好了,一移除就全部失效了。
  其实不然,在与Next的大坑中摸爬滚打了很久后,
  发现,你可以在themes/next/source/css/main.styl中最后加上一句:

@import "_custom/custom";

  然后再在themes/next/source/css目录下新建_custom文件夹,再进去新建custom.styl文件,将网上搜罗到的Next主题的文件都粘贴进去,就可以在本地预览这些新添加的样式了。

  🙆当然你也许不需要这么麻烦的操作,你甚至可以在themes/next/source/css文件夹中的任何一个.styl文件添加你想要的css样式代码都可以在本地预览中生效。

  我想其中的原因在于:主题调用的文件主要来自于themes/next/source/css/main.styl,而这个文件里面全是import语句,即将所有的css文件import进来,也就意味着最后生成的整体的main.css文件不过是将所有的css分文件中的语句按顺序排列罢了,所以你加在哪个文件改变的不过是最后的main.css的语句顺序罢了,但是其提供的效果依然生效。但为了日后修改方便,还是建议找对应的位置添加。

1️⃣ 问题陈述

  前言中我也提到了“本地预览生效”的话,意味着,你大可自己定义css样式,也可以将网上的内容复制粘贴,但有一点非常头疼,那就是大多数情况下,你只能成功地进行本地预览,而一旦deploy到服务器上要么就是完全无效,要么就是稀奇古怪,甚至有时候你即使将整个/css文件夹删除,发现deploy后的网站样式完全没有变化。😢

  紧接着通过在部署后的页面以及本地预览的页面分别进行F12调试,逐一对比,终于发现了不一样的地方。本地预览时调试页面的/css的文件下的文件名为main.css就跟hexo g生成在/public文件夹下是一模一样的,但是到了部署页面中这个文件名就变为了main.css?v=7.3.0,这多出来的?v=7.3.0百思不得其解。再看看main.css中的文件内容跟我pc里面的/public/css/main.css里面的东西一模一样,但是main.css?v=7.3.0里面莫名其妙的少了几百行,原以为是hexo deploy命令部署的不全,漏了东西,但上阿里云的服务器文件夹里面一看内容跟我本地的一样。并且当我将main.css里面的东西复制到main.css?v=7.3.0时,我想要的部署的页面就跟我本地预览终于一样了,虽然刷新一下就没了,毕竟是网页调试。

  那么问题就很清楚了,就是这个main.css?v=7.3.0并不放在服务器端,调用的源头也并不明朗,而且是无法更改的,所以得想办法让部署的页面加载main.css而不是main.css?v=7.3.0

2️⃣ 问题解决

  既然知道问题出在哪里就很简单了,费了一番功夫,终于发现在themes/next/layout/_partials/head/head.swig文件中,有一行语句是这样的:

<link rel="stylesheet" href="{{ url_for(theme.css) }}/main.css?v={{ version }}">

  很明显之前多出来的?v=7.3.0就是出自于这里的?v={{ version }},所以就把这里的?v={{ version }}删除,就可以了。

然后再hexo clean && hexo g && hexo d,查看部署端页面,样式齐全完美!问题解决。👍👍👍

3️⃣ 一些缺点

  这个方法可以完美地解决问题本身,而且绝对不会再出现本地预览与部署端不一样的问题,但是会出现副作用。

  当我以为终于可以愉快地肆无忌惮地玩耍时,又发现一个新的问题。就是我又再次改造了css样式,即在/_custom/custom文件中加入了一些样式,再hexo d发现样式没有变化。再调试发现问题,main.css文件没有变化。思考一下,猜测这个原因应该跟main.css?v=7.3.0问题是一样的,它本身是不可更改的,即使再hexo d新的css文件,其本身不会变化。

  问题的解决方法就是将themes/next/layout/_partials/head/head.swig中的

<link rel="stylesheet" href="{{ url_for(theme.css) }}/main.css">

改为

<link rel="stylesheet" href="{{ url_for(theme.css) }}/main1.css">

  也就是改成其他名字main1也好main2也好,就是改成跟原来不用的名字。然后继续hexo g就会将生成的那些博客文章页面里面的引用的css文件名改为main1.css文件。

  同时还要将/public/css中的main.css改为main1.css,最后hexo d,发现改动的css样式也生效了。

  当然这也就意味着,以后每次改动css样式,都要将main.css改成新的名字,如main2.cssmain3.css…。

  建议hexo clean && hexo g && hexo d之前,先备份一下/public文件夹,保留可以回退版本的可能。

  所以建议要么不改css,要么一次性改全。毕竟写Hexo博客,重要的不是好看,而是内容,不是嘛?😉

4️⃣ 总结

  • 删除themes/next/layout/_partials/head/head.swig中的main.css?v={{ version }}后面的?v={{ version }}
  • 每次修改css后,hexo d之前,改造themes/next/layout/_partials/head/head.swig中的main.css的名字,如main2.cssmain3.css…。
  • 建议hexo clean && hexo g && hexo d之前,先备份一下/public文件夹,保留可以回退版本的可能。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hexo是一个静态博客生成器,它提供了一些默认的主题,但是用户也可以自己开发或使用第三方主题。其中,Next是一款非常受欢迎的Hexo主题之一,它提供了丰富的功能和灵活的配置。 在使用Next主题时,我们可以通过override来修改主题的默认配置和样式。具体来说,override是指将主题的默认配置或样式文件复制到博客根目录下的/source/_data/或/source/css/override/目录下,然后进行修改。这样,在重新生成博客时,Hexo会优先使用override中的配置或样式文件,从而实现自定义主题的效果。 下面是具体的使用方法: 1. 复制配置文件到/source/_data/override/目录下 首先,我们可以通过命令`hexo config`查看当前主题的默认配置,然后将需要修改的配置项复制到/source/_data/override/目录下的同名文件中,并进行修改。例如,如果我们想修改Next主题的默认语言为英文,可以执行以下命令: ``` hexo config | grep language > source/_data/override/next.yml ``` 然后,打开source/_data/override/next.yml文件,将`language`的值修改为`en`,保存文件即可。 2. 复制样式文件到/source/css/override/目录下 如果我们需要修改主题的样式,可以将主题的默认样式文件复制到/source/css/override/目录下,并进行修改。例如,如果我们想修改Next主题的默认字体为微软雅黑,可以执行以下命令: ``` cp -r themes/next/source/css/fonts source/css/override/ ``` 然后,在source/css/override/fonts目录下,将所有字体文件中的字体名称修改为“Microsoft YaHei”,保存文件即可。 需要注意的是,override文件的命名和存放路径需要与主题默认文件一致,否则可能会导致修改无效或出现异常。同时,使用override也可能会导致主题升级时出现冲突,因此在使用时需要注意备份原始文件和谨慎修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值