Nunjucks具有越来越强大的jinja compatibility mode。如果我包含完整的nunjucks,则可以在渲染模板之前使用它调用nunjucks.installJinjaCompat()
(请参见下面的代码段):
nunjucks.installJinjaCompat();
var res = nunjucks.renderString(
'{% for i in list[0:2] %}' +
' count: {{ i }}' +
'{% endfor %}',
{list: [1, 2, 3, 4]}
);
document.write(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/nunjucks/3.0.1/nunjucks.min.js"></script>
我无法弄清楚如何预编译相同的代码。拥有文件
list.njk
:{% for i in list[0:2] %}
count: {{ i }}
{% endfor %}
我precompile使用默认的
nunjucks-precompile list.njk > list.js
命令,但是它引发了:/usr/local/lib/node_modules/nunjucks/src/precompile.js:130
throw lib.prettifyError(name, false, err);
^
Template render error: (list.njk) [Line 1, Column 15]
parseAggregate: expected comma after expression
at Object.exports.prettifyError (/usr/local/lib/node_modules/nunjucks/src/lib.js:34:15)
at _precompile (/usr/local/lib/node_modules/nunjucks/src/precompile.js:130:19)
at precompile (/usr/local/lib/node_modules/nunjucks/src/precompile.js:79:27)
at Object.<anonymous> (/usr/local/lib/node_modules/nunjucks/bin/precompile:62:13)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
如果我使用数组拼接是jinja-compatibility特有的构造,则会出现错误。如果删除
[0:2]
,它将编译。如何使用Jinja Compat模式来预编译模板?
我已经尝试在文档中找到此内容,解决nunjucks问题并检查
nunjucks-precompile
节点脚本中的nunjucks
变量,以便可以进行猴子补丁,包括nunjucks.installJinjaCompat()
调用;遗憾的是它不存在,它仅使用Environment
。 最佳答案
看来nunjucks-precompile
没有可用于nunjucks.installJinjaCompat()
的开关,但是您可以很容易地添加它:
复制现有的CLI文件并对其进行修改,以更正所需的源并安装compat层:
cp node_modules/.bin/nunjucks-precompile .
<edit nunjucks-precompile>
./nunjucks-precompile list.njk
...
与nunjucks
3.0.1
./nunjucks-precompile
应该看起来像#!/usr/bin/env node
var path = require('path');
var precompile = require('nunjucks/src/precompile').precompile;
var Environment = require('nunjucks/src/environment').Environment;
var lib = require('nunjucks/src/lib');
var nunjucks = require('nunjucks');
nunjucks.installJinjaCompat();
...
或者,您可以从here下载它。
关于javascript - 使用jinja2兼容模式预编译Nunjucks模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44791548/