Precompiling
使用 nunjucks-precompile
脚本来预编译模板,可传入一个目录或一个文件,他将把所有的模板生成 javascript。
// Precompiling a whole directory
$ nunjucks-precompile views > templates.js
// Precompiling individual templates
$ nunjucks-precompile views/base.html >> templates.js
$ nunjucks-precompile views/index.html >> templates.js
$ nunjucks-precompile views/about.html >> templates.js
你只需要在页面上加载 templates.js
,系统会自动使用预编译的模板,没有改变的必要。
这个脚本还有很多可选项,直接调用 nunjucks-precompile
可以看到更多信息。注意所有的异步过滤器需要当参数传入,因为编译时需要他们,你可以使用 -a
参数来传入(如 -a foo,bar,baz
)。如果只使用同步过滤器则不需要处理。
这个脚本无法指定扩展,所以你需要使用如下的预编译 api。
API
如果你希望通过代码来预编译模板,nunjucks 也提供了 api,特别是在使用扩展和异步过滤器的时候需要使用这些 api。可以将 Environment
的实例传给预编译器,其中将包括扩展和过滤器。你需要在客户端和服务器使用同一个 Environment
对象保证同步。
precompile
nunjucks.precompile(path, [opts])
传入 path 预编译一个文件或目录,opts 为如下的一些配置:
- name: 模板的名字,当编译一个字符串的时候需要,如果是一个文件则是可选的(默认为 path),如果是目录名字会自动生成。
- asFunction: 生成一个函数
- force: 如果出错还继续编译
- env:
Environment
的实例 - include: 包括额外的文件和文件夹 (folders are auto-included, files are auto-excluded)
- exclude: 排除额外的文件和文件夹 (folders are auto-included, files are auto-excluded)
- wrapper:
function(templates, opts)
自定义预编译模板的输出格式。这个函数必须返回一个字符串- templates: 由对象组成的,带有下列属性的数组:
- name: 模板名称
- template: 编译后的模板所生成的,运行在javascript上的字符串源码
- opts: 上面所有配置选项所组成的对象
- templates: 由对象组成的,带有下列属性的数组:
var env = new nunjucks.Environment();
// extensions must be known at compile-time
env.addExtension('MyExtension', new MyExtension());
// async filters must be known at compile-time
env.addFilter('asyncFilter', function(val, cb) {
// do something
}, true);
nunjucks.precompile('/dir/to/views', { env: env });
precompileString
nunjucks.precompileString(str, [opts])
和 precompile
相同,只是编译字符串。