Bug情况
按照官方讲解的目录创建Hexo主题时出现的Bug:
TypeError: Cannot convert undefined or null to object
at Function.keys (<anonymous>)
at getKeys (~/site/node_modules/deepmerge/dist/cjs.js:61:16)
.../*大部分省略*/
主题配置目录如下:
$ Tree -L 2
.
├── _config.yml
├── languages
├── layout
│ ├── _partials
│ ├── archives.ejs
│ ├── index.ejs
│ ├── layout.ejs
│ └── post.ejs
├── scripts
└── source
├── css
├── js
└── lib
解决方案
主题无论是使用ejs还是swig编写,都是使用这种通用的配置目录。当所有的配置文件都为空且目录为空时,就会出现这种错误。起初我以为是_config.yml的权限不足导致的结果,但是当使用chmod提升权限之后依旧有问题。
在网上查找之后,配置目录中存在配置文件,但文件为空,主题中的_config.yml内容也为空的创建流程几乎都是hexo2.8.0左右的教程。
最终,在hexo的github 4052issue找到了和我遇到相同问题的人,
其中@mcdanielisaac在评论中提到:
In my original issue post, I did not include my theme s config.yml file because it was empty. However that seems to be the issue. With the added ability to merge the config files there appears to need to be something in the file or it returns the error above.
该评论的大意是:因为theme的_config.yml文件内容为空,所以他并没有创建该文件。但由于hexo的_config.yml合并功能,如果创建了_config.yml文件又不填写内容的话,就会导致该Bug的发生。
在我查阅官方文档[1]之后,发现hexo的配置文件_config.yml合并功能很像静态语言继承接口的特质,如果你在自己的theme中配置了_config.yml那么里面必须存在部分配置用来和根目录中的_config.yml配置合并。所以在一开始新建主题时,如果没有任何需要在主题目录级的_config.yml进行配置的属性,那么就不要创建该文件以防止出现这种不必要的Bug。
参考链接
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!