Hexo遇到的问题

标签: 博客 分类: 前端 创建时间:2019-02-01 03:02:53 更新时间:2024-11-15 10:49:44

1.安装hexo

npm install hexo-cli -g

2.linux问题

在deepin系统上使用hexo d部署自己的博客到github,输入github的用户名密码之后,会有很长的时间命令行没有反应,等了很长时间,十分钟,在VS Code 的终端窗口会出现问题。

3.Last few GCs

运行hexo s的时候,出现了Last few GCS内存溢出的问题:Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory。

解决方法:
因为我安装了nvm,安装到了D盘,并且使用了nodejs的14.15.1的版本,所以找到D:\soft\nvm\v14.15.1\hexo,打开,进行添加如下的语句

1
2
3
4
5
6
7
8
9
10
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/hexo-cli/bin/hexo" "$@"
ret=$?
else
# 将下面的注释
# node "$basedir/node_modules/hexo-cli/bin/hexo" "$@"
# 添加如下内容
node --max_old_space_size=4096 "$basedir/node_modules/hexo-cli/bin/hexo" "$@"
ret=$?
fi

当然这也可能不管事。

后来这个问题,就是我在主题文件下,添加了一个extend的文件夹,里面写了一些脚本,所以在运行的时候就出现了同时运行这些脚本的情况。当我把这个文件拷出来之后,内存泄露的问题就不存在了。然后我把该文件再次移动到里面,又出现了内存泄露的问题,而且运行hexo s时也会实时监控主题文件夹中的所有文件,包括其中的node_modules文件,进行实时处理,所以就会造成了处理的文件过多,出现了内存泄露问题。

参考文章:
1.hexo g的时候内存溢出.我应该如何监控跟定位这个问题? (这个就是上面的问题)
2.Hexo Process Out of Memory 内存溢出问题 (这个是编辑了hexo的第一行:#!/usr/bin/env node –max_old_space_size=8192)
3.OutOfMemory with 3000 docs (这是文章超过三千的时候,会出现内存问题。)
4.Solve “Out of memory” during generation by limiting the number of concurrent tasks #3665 (这片文章没啥用)

跳过某些文件夹

既然知道了hexo会搜描并渲染theme某个主题下的全部的文件夹及文件,然后知道需要的内容,那么要想让我编写的某一个文件夹不被渲染,就要添加例外(本意我新建这个文件夹并在其中初始化npm库的原因就是我修改了一个压缩图片的库,想着如果有一天能和主题一起发布的话,那么其中的内容就和主题一样了)。

当然使用skip_render好像不能满足需求,于是就可以使用ignore进行忽略,在主题的_config.yml配置文件中添加如下的内容:

1
2
ignore:
- "**/themes/**/extend"
参考文章:
1.Hexo 跳过指定文件的渲染 (讲了如何跳过source下的某些文件以及文件夹)
2.Hexo跳过指定文件的渲染 (这个也是,不过也多加了一些其他的东西)
3.如何防止hexo渲染某个文件夹
4.【源码开放】Hexo+Github+Coding 博客butterfly 和 matery 主题 搭建完全教程【整理】 (偶然间发现的一个大三学生写的blog,真的很让我佩服,可设置阅读文章时做密码验证、使用PicGo+Github搭建免费图床)
5.配置 (官方说明中关于include包含某些文件、exclude排除某些文件、ignore忽略某些文件以及skip_render跳过某些文件渲染的区别)

4.部署到gitee之后仓库会逐渐变得膨胀

使用hexo d进行网站部署之后,部署几次之后,github没有问题,就是gitee就回出现:Push rejected for repository size exceeds limit,说是仓库超出了1024M大小的限制,但是实际上整个public文件夹,以及.deploy_git文件夹也没有这么大的,我怀疑就是每次都是重新部署,不是覆盖而是增加。

5.Hexo无法在主题文件夹中执行npm install命令

事情的起因是这样的,我想将主题文件夹下的js等进行压缩,也想自动执行git等命令,于是我选择了gulp这个工具。在next和自带的landscape主题中都有gulpfile的身影,所以我进入到next主题文件夹,然后执行npm install命令,因为这个文件夹里面有package.json文件,所以主题文件夹中很快生成了node_modules文件夹,这是正常的。但是当我回到hexo的根目录,执行hexo s命令打算启动hexo的时候,竟然报错了,而且启动不起来。

或者是这个错误:

估计是在hexo s执行时,全盘扫描了theme/next主题文件夹中所有文件,然后进行处理,所以对于庞大的node_modules,就显得力不从心了。这个问题我没找到合适的解释和解决方案,不明白别人的的主题都是怎么开发的,或者说是主题中的gulp命令是怎么执行的,进一步说是,为什么主题文件夹中还有个package.json文件。

现在原始的解决方式,就是将主题文件夹中的package.json中的包,手动安装到hexo的根目录下,然后在根目录下通过指定gulpfile文件的位置(或者干脆也把gulpfile放到根目录下,theme中的gulpfile就当是单独发布的主题的时候使用吧),来执行gulp命令,而对于主题文件夹下的package.json文件,就作为一个说明,在后来的单独发布主题时备用吧。

参考文章:
1.Gulp 指定gulpfile
2.关于在 Node.js 中引用模块,知道这些就够了 (主要提供了对于nodejs的模块搜索路径的介绍)
3.Hexo+Next主题优化

6.Hexo无法显示图片

刚开始运行hexo的时候,在网站配置文件中开启post_asset_folder: true,使用 标签语法,是可以在文章中生成图片的,图片可以正常的链接。但是后来删除了网站的node_modules文件夹,然后重新npm install之后,问题就来了(当然问题可能不出在这里),使用asset_img再也引用不到图片了,图片的路径中,莫名奇妙的多了一个.io前缀,这个前缀可能是因为使用了github.io,问题出自哪里,网上没有相应的说明。

配置文件如下图,没毛病:

我尝试着将hexo-asset-image降级到0.0.3,最后甚至npm删除了这个插件,(发现有没有它都没问题,hexo核心中已经加入了相应的代码)。官网是这么说的“在Hexo 2时代,社区创建了很多插件来解决这个问题。但是,随着Hexo 3 的发布,许多新的标签插件被加入到了核心代码中。这使得你可以更简单地在文章中引用你的资源”。经过一段时间的摸索和谷歌,始终找不到问题答案,基本上都是说可以使用asset_img语法显示图片。
后来我新建的文章中,使用同样的语法,再次hexo s却可以显示图片,这真是令人无法理解。于是我结束hexo s,然后执行hexo clean,最后再次hexo s,图片又回来了,简直蛋疼有没有。

浪费了很多时间,最后仅仅只是删除了hexo-asset-img插件,中间还执行了一次npm audit fix,更新了包,最后竟是稀里糊涂的出现问题,稀里糊涂的解决了问题,不知该庆祝还是该哭泣。。。。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。