Precompiling

使用 nunjucks-precompile 脚本来预编译模板,可传入一个目录或一个文件,他将把所有的模板生成 javascript。

  1. // Precompiling a whole directory
  2. $ nunjucks-precompile views > templates.js
  3. // Precompiling individual templates
  4. $ nunjucks-precompile views/base.html >> templates.js
  5. $ nunjucks-precompile views/index.html >> templates.js
  6. $ 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: 上面所有配置选项所组成的对象
  1. var env = new nunjucks.Environment();
  2. // extensions must be known at compile-time
  3. env.addExtension('MyExtension', new MyExtension());
  4. // async filters must be known at compile-time
  5. env.addFilter('asyncFilter', function(val, cb) {
  6. // do something
  7. }, true);
  8. nunjucks.precompile('/dir/to/views', { env: env });

precompileString

nunjucks.precompileString(str, [opts])

precompile 相同,只是编译字符串。