江鸟's Blog

如何从根本解决hexo不兼容标签问题

字数统计: 508阅读时长: 2 min
2020/04/02 Share

如何从根本解决hexo不兼容标签问题

报错

1
2
3
INFO  Start processing
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Nunjucks Error: [Line 96, Column 110] expected name as lookup value, got .

出现这个情况一般是因为Markdown文件中有标签与nunjucks模板引擎的标签冲突了,这些标签都是模板引擎的,如果Markdown文件中有这些标签,那么在解析的是就会把Markdown中的标签动态解析了。通常情况下是不允许的。

这里提供几个方案

方案一

当然是最简单的,把博客卸载不用了!!!🐶

开玩笑,其实是使用标签进行处理

1
2
3
{% raw %}
{{}}
{% endraw %}

这样,但是这样使用有一个麻烦的点,经过我的测试,只能在小部分的地方比如只包括代码,如果大面积的使用会导致其他标签失效,比如说##,所以一般不采用这样方法

方案二

半永久方法,修改配置文件

直接修改nunjucks模板的源代码,找到如下文件:

1
node_modules/nunjucks/src/lexer.js

在文件的开头可以看到如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
;

var lib = require('./lib');

var whitespaceChars = " ntrxA0";
var delimChars = '()[]{}%*-+~/#,:|.<>=!';
var intChars = '0123456789';
var BLOCK_START = '{%';
var BLOCK_END = '%}';
var VARIABLE_START = '{$';
var VARIABLE_END = '$}';
var COMMENT_START = '{@';
var COMMENT_END = '@}';
var TOKEN_STRING = 'string';

可以直接改了这些渲染标签,比如我的Markdown文件中就是需要显示{{name}}这一类代码。那么你可以这么做:

1
2
var VARIABLE_START = '{$';
var VARIABLE_END = '$}';

把模板引擎的占位符修改为其他字符之后,这样模板解析的时候就不会跟你的Markdown内容冲突了,而且是对所有Markdown文件都有效的。

但是这个方法在进行模版的更新之后就会失效,所以是半永久

CATALOG
  1. 1. 如何从根本解决hexo不兼容标签问题
    1. 1.1. 报错
    2. 1.2. 方案一
    3. 1.3. 方案二