function initView(app) { const configService: ConfigService = app.get(ConfigService); const viewPath = path.join(__dirname, '../views'); app.setBaseViewsDir(viewPath); app.setViewEngine('njk'); const nunjucksEnv = nunjucks.configure(viewPath, { noCache: process.env.NODE_ENV === configService.DEVELOPMENT, autoescape: true, express: app, }); for (const key of Object.keys(viewfilter)) { nunjucksEnv.addFilter(key, viewfilter[key]); } // macro中不能访问当前 context , 将要访问的变量加到 global nunjucksEnv.addGlobal('env', configService.env); nunjucksEnv.addGlobal('jsPath', configService.static.jsPath); }
views() { nunjucks.configure(path.resolve(__dirname, 'app', 'views'), { watch: this.isDev, express: this.express, autoescape: true, }); this.express.use(express.static(path.resolve(__dirname, 'public'))); this.express.set('view engine', 'njk'); }
/** * Custom settings nunjucks template engine * @param setting [Object] - Nunjucks configure settings * @param opts [Object] - Nunjucks options setting for custom filter loader, show configure. */ configure(setting, opts) { if (!setting) setting = {}; this.app.set('view engine', 'crab'); let env = nunjucks.configure(setting.path, { express: this.app, autoescape: setting.autoescape || true, // default trimBlocks: setting.trimBlocks || true, lstripBlocks: setting.lstripBlocks || true, dev: setting.dev || false, noCache: setting.noCache || false, // default watch: setting.watch || false // default }); if (opts) { if (opts.showConfigure) Nunjucks.showConfigure(env); opts.filter ? Nunjucks.require(env, opts.filter) : Nunjucks.require(env, __base + '/customs/filters/*.js'); opts.addGlobal ? Nunjucks.require(env, opts.addGlobal) : Nunjucks.require(env, __base + '/customs/global/*.js'); Nunjucks.require(env, __base + '/core/nunjucks_global/*.js'); Nunjucks.require(env, __base + '/core/nunjucks_filter/*.js'); } return env; }