websites site react pages page framework for cms blog gulp pug markdown static-site

gulp - site - trago generar archivo html con jade a través de markdown json



static site framework (2)

Estoy usando gulp-markdown-to-json y gulp-jade

Mi objetivo es obtener datos del archivo de marcado que se ve así:

--- template: index.jade title: Europa --- This is a test.

agarrar template: index.jade archivo template: index.jade y pasarlo junto con otras variables al compilador de jade.

Hasta ahora tengo esto:

gulp.task(''docs'', function() { return gulp .src(''./src/docs/pages/*.md'') .pipe(md({ pedantic: true, smartypants: true })) .pipe(jade({ jade: jade, pretty: true })) .pipe(gulp.dest(''./dist/docs'')); });

Me falta un paso donde se lee json de markdown, y el nombre de archivo de la plantilla de jade se envía a gulp.src antes de que se ejecute el compilador de jade.


gulp-jade es el complemento gulp incorrecto para su caso de uso.

  • Si tiene una secuencia de plantillas que desea rellenar con datos, use gulp-jade :

    gulp.src(''*.jade'') .pipe(...) .pipe(jade({title:''Some title'', text:''Some text''}))

  • Si tiene una secuencia de datos que desea representar en plantillas, use gulp-wrap :

    gulp.src(''*.md'') .pipe(...) .pipe(wrap({src:''path/to/my/template.jade''})

Su caso es un poco más difícil, ya que quiere una plantilla .jade diferente para cada archivo .md . Afortunadamente, gulp-wrap acepta una función que puede devolver una plantilla diferente para cada archivo en la transmisión:

var gulp = require(''gulp''); var md = require(''gulp-markdown-to-json''); var jade = require(''jade''); var wrap = require(''gulp-wrap''); var plumber = require(''gulp-plumber''); var rename = require(''gulp-rename''); var fs = require(''fs''); gulp.task(''docs'', function() { return gulp.src(''./src/docs/pages/*.md'') .pipe(plumber()) // this just ensures that errors are logged .pipe(md({ pedantic: true, smartypants: true })) .pipe(wrap(function(data) { // read correct jade template from disk var template = ''src/docs/templates/'' + data.contents.template; return fs.readFileSync(template).toString(); }, {}, { engine: ''jade'' })) .pipe(rename({extname:''.html''})) .pipe(gulp.dest(''./dist/docs'')); });

src / docs / pages / test.md

--- template: index.jade title: Europa --- This is a test.

src / docs / templates / index.jade

doctype html html(lang="en") head title=contents.title body h1=contents.title div !{contents.body}

dist / docs / test.html

<!DOCTYPE html><html lang="en"><head><title>Europa</title></head><body><h1>Europa</h1><div><p>This is a test. </p></div></body></html>


No necesita usar gulp-markdownto-json . Hay si hay muchas mejores soluciones. Por ejemplo:

  • Observación : es un procesador de reducción que analiza Markdown en AST-tree (en formato JSON). Tiene soporte de YAML-frontmatter fuera de la caja. Por cierto, hay muchos complementos para diferentes casos de uso.
  • artículo-datos : extrae los datos de su artículo de descuento sin usar front-tabter. Personalmente, utilizo este paquete, porque me ayuda a escribir archivos de marcación Juse, sin preocuparme por los datos correctos en frontmate. Simplemente extorsiona los datos del archivo de rebajas y luego puede hacer lo que sea necesario: pasar al complemento gulp, recopilar en conjunto, analizar sus artículos, etc.

Aquí hay un ejemplo de cómo uso los datos del artículo en mi blog personal.