Erreurs rencontrees
Si votre blog est construit avec github + hexo, vous avez probablement rencontre des problemes d'analyse des fichiers md dus aux balises de modele nunjucks. Les problemes courants sont les suivants :
15:07:29.010 FATAL Something is wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Template render error: (unknown path) [Line 37, Column 81]
expected variable end
at Object._prettifyError (/Users/ubuntuvim/git/xcoding/node_modules/nunjucks/src/lib.js:36:11)
at Template.render (/Users/ubuntuvim/git/xcoding/node_modules/nunjucks/src/environment.js:524:21)
at Environment.renderString (/Users/ubuntuvim/git/xcoding/node_modules/nunjucks/src/environment.js:362:17)
at Promise (/Users/ubuntuvim/git/xcoding/node_modules/hexo/lib/extend/tag.js:66:9)
Ou encore :
Unhandled rejection Template render error: (unknown path) [Line 10, Column 95]
unexpected token: #
at Object._prettifyError (/Users/ubuntuvim/git/xcoding/node_modules/nunjucks/src/lib.js:36:11)
La cause de ces erreurs provient du fait que vos fichiers Markdown contiennent des balises qui entrent en conflit avec le moteur de modeles nunjucks, comme %%, {#, {%. Ces balises sont reservees au moteur de modeles. Pour plus d'informations sur nunjucks, consultez la documentation officielle.
Solution 1
La premiere approche consiste a utiliser des balises brutes :
{% raw %}
%%nom%%
{% endraw %}
Cependant, cette solution n'est que temporaire. Si vous utilisez cette methode, tout le contenu Markdown contenant ces balises sera analyse de maniere incorrecte par la suite.
Solution 2
Il est possible de modifier le code source de nunjucks directement. Locatez le fichier suivant :
node_modules/nunjucks/src/lexer.js
Au debut du fichier, vous trouverez ce code :
'use strict';
var lib = require('./lib');
var espaces = " \n\t\r\xA0";
var delimites = '()[]{}%*-+~/#,:|.<>=!';
var chiffres = '0123456789';
var DEBUT_BLOC = '{%';
var FIN_BLOC = '%}';
var DEBUT_VARIABLE = '[[';
var FIN_VARIABLE = ']]';
var DEBUT_COMMENTAIRE = '{@';
var FIN_COMMENTAIRE = '@}';
var TYPE_CHAINE = 'chaine';
Vous pouvez modifier ces delimiters de rendu. Par exemple, si votre fichier Markdown necessite d'afficher des code comme %%nom%%, procédez comme suit :
var DEBUT_VARIABLE = '[[';
var FIN_VARIABLE = ']]';
Apres avoir modifie les delimiters du moteur de modeles, l'analyse ne rentrera plus en conflit avec votre contenu Markdonw. Cette modfiication s'applique a tous les fichiers Markdown.
Attention : Si vous executez npm install pour mettre a jour les dependances, le fichier node_modules/nunjucks/src/lexer.js sera reimprime et vous devrez re-appliquer cette modification.
Modification des plugins de recherche et RSS
Si vous utilisez hexo-generator-feed, hexo-generator-search ou d'autres plugins dependants de hexo, vous devez egalement modifier les balises de traitement des modeles de ces plugins. taking the search plugin as an example :
Modifiez le fichier suivant :
node_modules/hexo-generator-search/templates/search.xml
Remplacez toutes les occurrences de { par [[ selon vos modifications precedentes.
<?xml version="1.0" encoding="utf-8"?>
<search>
{% if posts %}
{% for post in posts.toArray() %}
<entry>
<title>[[ post.title ]]</title>
<link href="[[ (url + post.path) | uriencode ]]"/>
<url>[[ (url + post.path) | uriencode ]]</url>
<content type="html"><![CDATA[[[ post.content | noControlChars | safe ]]]></content>
{% if post.categories and post.categories.length>0 %}
<categories>
{% for cate in post.categories.toArray() %}
<category> [[ cate.name ]] </category>
{% endfor %}
</categories>
{% endif %}
{% if post.tags and post.tags.length>0 %}
<tags>
{% for tag in post.tags.toArray() %}
<tag> [[ tag.name ]] </tag>
{% endfor %}
</tags>
{% endif %}
</entry>
{% endfor %}
{% endif %}
</search>
Solution 3
Une solution permanente consiste a modifier le fichier package.json de votre projet et a remplacer les plugins par des versions personnalisees :
{
"name": "monblog",
"version": "0.0.1",
"private": true,
"hexo": {
"version": "3.7.1"
},
"dependencies": {
"hexo-generator-feed-cst": "^0.1.0",
"hexo-generator-search-cst": "^0.1.0"
}
}
Apres avoir modifie package.json, executez la commande npm install pour reinstaller les dependances. Cette approche ne necessite aucune modification supplementaire des configurations des plugins et vous n'aurez pas a vous soucier des mises a jour qui pourraient ecraser vos modifications.