carlitoplatanito / gulp-nunjucks-render

[Gulp](https://github.com/wearefractal/gulp) plugin to render [Nunjucks](http://mozilla.github.io/nunjucks/) templates
149 stars 33 forks source link

[Question]How to give data on templates you only include? #73

Closed kud closed 5 years ago

kud commented 5 years ago

Currently I'm doing this:

const PATHS = {
  srcFilesGlob: path.resolve(__dirname, "src/**/*"),
  pagesGlob: path.resolve(__dirname, "src/pages/**/*.njk"),
  partialsGlob: path.resolve(__dirname, "src/pages/**/**(.mjml).partial.njk"),

  rootDir: path.resolve(__dirname, "src"),
  componentsDir: path.resolve(__dirname, "src/components"),
  fontsDir: path.resolve(__dirname, "src/fonts"),
  layoutsDir: path.resolve(__dirname, "src/layouts"),
  pagesDir: path.resolve(__dirname, "src/pages"),
  stylesDir: path.resolve(__dirname, "src/styles"),

  buildDir: path.resolve(__dirname, "__build__"),
  outputDir: path.resolve(__dirname, "dist"),
}

return gulp
    .src([`${PATHS.pagesGlob}`, `!${PATHS.partialsGlob}`])
    .pipe(
      nunjucks({
        data: PATHS,
        path: [
          PATHS.componentsDir,
          PATHS.fontsDir,
          PATHS.layoutsDir,
          PATHS.pagesDir,
          PATHS.stylesDir,
        ],
        envOptions: {
          noCache: true,
          tags: {
            blockStart: "<%",
            blockEnd: "%>",
            variableStart: "<$",
            variableEnd: "$>",
            commentStart: "<#",
            commentEnd: "#>",
          },
        },
      }),
    )
    .pipe(gulp.dest(PATHS.buildDir))

It compiles well the files in pagesGlob but also excludes partialsGlob in order to have only pages as final files, not partials, in buildDir.

In pages, I can do import or include of partials in nunjucks, it works well.

However, as partialsGlob is exclude, data: PATHS, isn't given to those files, which means I can't use variables like componentsDir.

Do you have any idea to make it work?

Thank you.

kud commented 5 years ago

I put 'em into env.addGlobal instead of data!

Youuhouu

        manageEnv: (env) => {
          env.addGlobal("componentsDir", PATHS.componentsDir)
          env.addGlobal("layoutsDir", PATHS.layoutsDir)
          env.addGlobal("pagesDir", PATHS.pagesDir)
          env.addGlobal("stylesDir", PATHS.stylesDir)
        },