如何用Node.js将模板文件变量替换为prompt输入的自定义内容?
没问题,这事儿其实挺简单的,分两步就能搞定:先做好带变量占位符的模板文件,再修改你的JS脚本完成替换逻辑就行。
1. 制作带变量的text.txt模板文件
你可以给模板里的变量定义一个统一的占位符格式,比如用{{变量名}}这种形式,既清晰又不容易和普通文本混淆。比如你的模板内容可以写成这样:
Hello, {{name}}
这是为{{projectName}}生成的测试文件,作者是{{author}}
如果你的变量是像variable.name这种带点的结构,也可以直接写成{{variable.name}},完全不影响后续替换。
2. 修改JavaScript脚本实现变量替换
首先得说明:如果要在本地创建.php文件,你的JS脚本应该是运行在Node.js环境里的(浏览器没法直接操作本地文件)。下面我给你写个完整的示例,用Node.js的原生模块实现:
示例代码
const fs = require('fs'); const readline = require('readline'); // 创建命令行交互接口,用来模拟prompt输入 const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); // 第一步:读取text.txt模板内容 fs.readFile('./text.txt', 'utf8', (readErr, templateContent) => { if (readErr) { console.error('读取模板文件出错啦:', readErr); rl.close(); return; } // 第二步:获取用户输入的变量值 rl.question('请输入name的值: ', (name) => { // 如果你有多个变量,可以继续添加question提问 // rl.question('请输入projectName的值: ', (projectName) => { ... }) // 第三步:替换模板里的变量 // 单个变量替换 let finalContent = templateContent.replace(/{{name}}/g, name); // 如果有多个变量,继续追加replace就行,比如: // finalContent = finalContent.replace(/{{projectName}}/g, projectName); // 要是变量特别多,也可以用对象批量替换,更高效: // const variables = { name: name, projectName: projectName }; // finalContent = templateContent.replace(/{{(\w+)}}/g, (match, key) => variables[key] || match); // 第四步:写入生成.php文件 fs.writeFile('./output.php', finalContent, 'utf8', (writeErr) => { if (writeErr) { console.error('生成文件失败:', writeErr); } else { console.log('搞定!文件已经生成啦~'); } rl.close(); }); }); });
关键细节说明
- 正则里的
g标志是全局替换,确保模板里所有的{{name}}都会被替换,而不只是第一个。 - 如果你的变量是
variable.name这种带特殊字符的,正则要调整一下,比如用/{{variable\.name}}/g(注意点要转义),或者用批量替换的方式更省心。 - 如果你是在Electron环境里(可以用浏览器的
prompt()),那只需要把获取输入的部分换成const name = prompt('请输入name:');,其余替换和写入逻辑是一样的。
内容的提问来源于stack exchange,提问作者user5296504
相关产品推荐
相关产品推荐

