Creating Markdown files from a template is a straightforward process with Node.js and Mustache. You can define a template, load it into your script, then push whatever data you have into your template, then write the files back out. Node.js built-in filesystem tools allow you to read and write the files while Mustache helps you to push the data into the template.
Install:
npm i --save mustache
index.js:
let fs = require("fs")let { render } = require("mustache")
let template = fs.readFileSync("./template.md").toString()people.forEach(person => { ?let output = render(template, person) ?fs.writeFileSync(`./people/${person.name}.md`, output)})
let fs = require("fs")let { render } = require("mustache")let people = [ ?{ ???name: "Luke Skywalker", ???height: "172", ???mass: "77", ???hair_color: "blond", ???skin_color: "fair", ???eye_color: "blue", ???birth_year: "19BBY", ???gender: "male", ???homeworld: "https://swapi.co/api/planets/1/", ???films: [ ?????"https://swapi.co/api/films/2/", ?????"https://swapi.co/api/films/6/", ?????"https://swapi.co/api/films/3/", ?????"https://swapi.co/api/films/1/", ?????"https://swapi.co/api/films/7/" ???], ???species: ["https://swapi.co/api/species/1/"], ???vehicles: [ ?????"https://swapi.co/api/vehicles/14/", ?????"https://swapi.co/api/vehicles/30/" ???], ???starships: [ ?????"https://swapi.co/api/starships/12/", ?????"https://swapi.co/api/starships/22/" ???], ???created: "2014-12-09T13:50:51.644000Z", ???edited: "2014-12-20T21:17:56.891000Z", ???url: "https://swapi.co/api/people/1/" ?}, ?{ ???name: "C-3PO", ???height: "167", ???mass: "75", ???hair_color: "n/a", ???skin_color: "gold", ???eye_color: "yellow", ???birth_year: "112BBY", ???gender: "n/a", ???homeworld: "https://swapi.co/api/planets/1/", ???films: [ ?????"https://swapi.co/api/films/2/", ?????"https://swapi.co/api/films/5/", ?????"https://swapi.co/api/films/4/", ?????"https://swapi.co/api/films/6/", ?????"https://swapi.co/api/films/3/", ?????"https://swapi.co/api/films/1/" ???], ???species: ["https://swapi.co/api/species/2/"], ???vehicles: [], ???starships: [], ???created: "2014-12-10T15:10:51.357000Z", ???edited: "2014-12-20T21:17:50.309000Z", ???url: "https://swapi.co/api/people/2/" ?}, ?{ ???name: "R2-D2", ???height: "96", ???mass: "32", ???hair_color: "n/a", ???skin_color: "white, blue", ???eye_color: "red", ???birth_year: "33BBY", ???gender: "n/a", ???homeworld: "https://swapi.co/api/planets/8/", ???films: [ ?????"https://swapi.co/api/films/2/", ?????"https://swapi.co/api/films/5/", ?????"https://swapi.co/api/films/4/", ?????"https://swapi.co/api/films/6/", ?????"https://swapi.co/api/films/3/", ?????"https://swapi.co/api/films/1/", ?????"https://swapi.co/api/films/7/" ???], ???species: ["https://swapi.co/api/species/2/"], ???vehicles: [], ???starships: [], ???created: "2014-12-10T15:11:50.376000Z", ???edited: "2014-12-20T21:17:50.311000Z", ???url: "https://swapi.co/api/people/3/" ?}, ?{ ???name: "Darth Vader", ???height: "202", ???mass: "136", ???hair_color: "none", ???skin_color: "white", ???eye_color: "yellow", ???birth_year: "41.9BBY", ???gender: "male", ???homeworld: "https://swapi.co/api/planets/1/", ???films: [ ?????"https://swapi.co/api/films/2/", ?????"https://swapi.co/api/films/6/", ?????"https://swapi.co/api/films/3/", ?????"https://swapi.co/api/films/1/" ???], ???species: ["https://swapi.co/api/species/1/"], ???vehicles: [], ???starships: ["https://swapi.co/api/starships/13/"], ???created: "2014-12-10T15:18:20.704000Z", ???edited: "2014-12-20T21:17:50.313000Z", ???url: "https://swapi.co/api/people/4/" ?}, ?{ ???name: "Leia Organa", ???height: "150", ???mass: "49", ???hair_color: "brown", ???skin_color: "light", ???eye_color: "brown", ???birth_year: "19BBY", ???gender: "female", ???homeworld: "https://swapi.co/api/planets/2/", ???films: [ ?????"https://swapi.co/api/films/2/", ?????"https://swapi.co/api/films/6/", ?????"https://swapi.co/api/films/3/", ?????"https://swapi.co/api/films/1/", ?????"https://swapi.co/api/films/7/" ???], ???species: ["https://swapi.co/api/species/1/"], ???vehicles: ["https://swapi.co/api/vehicles/30/"], ???starships: [], ???created: "2014-12-10T15:20:09.791000Z", ???edited: "2014-12-20T21:17:50.315000Z", ???url: "https://swapi.co/api/people/5/" ?}, ?{ ???name: "Owen Lars", ???height: "178", ???mass: "120", ???hair_color: "brown, grey", ???skin_color: "light", ???eye_color: "blue", ???birth_year: "52BBY", ???gender: "male", ???homeworld: "https://swapi.co/api/planets/1/", ???films: [ ?????"https://swapi.co/api/films/5/", ?????"https://swapi.co/api/films/6/", ?????"https://swapi.co/api/films/1/" ???], ???species: ["https://swapi.co/api/species/1/"], ???vehicles: [], ???starships: [], ???created: "2014-12-10T15:52:14.024000Z", ???edited: "2014-12-20T21:17:50.317000Z", ???url: "https://swapi.co/api/people/6/" ?}, ?{ ???name: "Beru Whitesun lars", ???height: "165", ???mass: "75", ???hair_color: "brown", ???skin_color: "light", ???eye_color: "blue", ???birth_year: "47BBY", ???gender: "female", ???homeworld: "https://swapi.co/api/planets/1/", ???films: [ ?????"https://swapi.co/api/films/5/", ?????"https://swapi.co/api/films/6/", ?????"https://swapi.co/api/films/1/" ???], ???species: ["https://swapi.co/api/species/1/"], ???vehicles: [], ???starships: [], ???created: "2014-12-10T15:53:41.121000Z", ???edited: "2014-12-20T21:17:50.319000Z", ???url: "https://swapi.co/api/people/7/" ?}, ?{ ???name: "R5-D4", ???height: "97", ???mass: "32", ???hair_color: "n/a", ???skin_color: "white, red", ???eye_color: "red", ???birth_year: "unknown", ???gender: "n/a", ???homeworld: "https://swapi.co/api/planets/1/", ???films: ["https://swapi.co/api/films/1/"], ???species: ["https://swapi.co/api/species/2/"], ???vehicles: [], ???starships: [], ???created: "2014-12-10T15:57:50.959000Z", ???edited: "2014-12-20T21:17:50.321000Z", ???url: "https://swapi.co/api/people/8/" ?}, ?{ ???name: "Biggs Darklighter", ???height: "183", ???mass: "84", ???hair_color: "black", ???skin_color: "light", ???eye_color: "brown", ???birth_year: "24BBY", ???gender: "male", ???homeworld: "https://swapi.co/api/planets/1/", ???films: ["https://swapi.co/api/films/1/"], ???species: ["https://swapi.co/api/species/1/"], ???vehicles: [], ???starships: ["https://swapi.co/api/starships/12/"], ???created: "2014-12-10T15:59:50.509000Z", ???edited: "2014-12-20T21:17:50.323000Z", ???url: "https://swapi.co/api/people/9/" ?}, ?{ ???name: "Obi-Wan Kenobi", ???height: "182", ???mass: "77", ???hair_color: "auburn, white", ???skin_color: "fair", ???eye_color: "blue-gray", ???birth_year: "57BBY", ???gender: "male", ???homeworld: "https://swapi.co/api/planets/20/", ???films: [ ?????"https://swapi.co/api/films/2/", ?????"https://swapi.co/api/films/5/", ?????"https://swapi.co/api/films/4/", ?????"https://swapi.co/api/films/6/", ?????"https://swapi.co/api/films/3/", ?????"https://swapi.co/api/films/1/" ???], ???species: ["https://swapi.co/api/species/1/"], ???vehicles: ["https://swapi.co/api/vehicles/38/"], ???starships: [ ?????"https://swapi.co/api/starships/48/", ?????"https://swapi.co/api/starships/59/", ?????"https://swapi.co/api/starships/64/", ?????"https://swapi.co/api/starships/65/", ?????"https://swapi.co/api/starships/74/" ???], ???created: "2014-12-10T16:16:29.192000Z", ???edited: "2014-12-20T21:17:50.325000Z", ???url: "https://swapi.co/api/people/10/" ?}]let template = fs.readFileSync("./template.md").toString()people.forEach(person => { ?let output = render(template, person) ?fs.writeFileSync(`./people/${person.name}.md`, output)})
Code
[Tools] Batch Create Markdown Files from a Template with Node.js and Mustache
原文地址:https://www.cnblogs.com/Answer1215/p/10343283.html