[Tools] Batch Create Markdown Files from a Template with Node.js and Mustache
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) })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-01-31 [React] Refactor a Stateful List Component to a Functional Component with React PowerPlug
2018-01-31 [MST] Use Volatile State and Lifecycle Methods to Manage Private State
2017-01-31 [React] Test friendly approach
2017-01-31 [React] Modify file structure
2017-01-31 [Javascript] Format console.log with CSS and String Template Tags
2017-01-31 [Angular] ChangeDetection -- onPush
2016-01-31 [Javascript] Redirect the browser using JavaScript