22 * View Compilation Helpers
33 */
44
5- const _ = require ( 'lodash' ) ;
65const random = require ( 'lodash/random' ) ;
76const defaults = require ( 'lodash/defaults' ) ;
8- const nunjucks = require ( 'nunjucks' ) ;
9- const marked = require ( 'marked' ) ;
10- const Markdown = require ( 'nunjucks-markdown/lib/markdown_tag' ) ;
117const loremIpsum = require ( 'lorem-ipsum' ) ;
128
139const nunjucksEnv = ( viewPath ) => {
10+
11+ const nunjucks = require ( 'nunjucks' ) ;
12+ const marked = require ( 'marked' ) ;
13+ const Markdown = require ( 'nunjucks-markdown/lib/markdown_tag' ) ;
14+
15+
1416 const env = nunjucks . configure ( viewPath , {
1517 noCache : true
1618 } ) ;
@@ -44,9 +46,13 @@ const nunjucksEnv = (viewPath) => {
4446
4547} ;
4648
47- const defaultHelpers = ( /*options*/ ) => {
4849
49- return {
50+
51+ module . exports . createRenderer = ( viewPaths , options , helpers ) => {
52+
53+ const matchRegExp = / \. ( n j k | h t m l ) $ / ;
54+
55+ const defaultHelpers = {
5056 lorem ( min , max , config ) {
5157 const count = max ? random ( min , max ) : min ;
5258 const loremDefaults = {
@@ -59,20 +65,22 @@ const defaultHelpers = (/*options*/) => {
5965 }
6066 } ;
6167
62- } ;
63-
64- const noopHelper = ( ) => ( { } ) ;
65-
66- module . exports . createRenderer = ( viewPaths , options , helpers = noopHelper ) => {
67-
68- const env = nunjucksEnv ( viewPaths , options ) ;
69-
70- env . addGlobal ( 'helpers' , Object . assign ( helpers ( options ) , defaultHelpers ( options ) ) ) ;
71- env . addGlobal ( '_' , _ ) ;
68+ let env ;
7269
7370 return {
74- env,
71+ get env ( ) {
72+ return env ;
73+ } ,
74+ name : 'nunjucks' ,
75+ extensions : [ 'njk' , 'html' ] ,
76+ match : ( filepath ) => matchRegExp . test ( filepath ) ,
7577 render ( string , locals ) {
78+ //lazy load renderer
79+ if ( ! env ) {
80+ env = nunjucksEnv ( viewPaths , options ) ;
81+ env . addGlobal ( 'helpers' , Object . assign ( { } , defaultHelpers , helpers && helpers ( options ) ) ) ;
82+ env . addGlobal ( '_' , require ( 'lodash' ) ) ;
83+ }
7684 return env . renderString ( string , locals ) ;
7785 }
7886 } ;
0 commit comments