対話型でマークダウンファイルを作成するスクリプトの書き方 | Node
前提
fsを使うので、Nodeを使って動かします
Node v16.6.1
ESModule
script
Nodeのreadline
を使ってコンソールに対話式のコメントを出していきます
import readline from "readline";
const q = readline.createInterface({
input: process.stdin,
output: process.stdout
});
q.question("File Path: ", (a) => {
// anything
q.close();
});
シンプルに書くと上記のようになります
次は中に処理を足していきます
ファイルを読み書きする
fs
を使ってファイルを読み書きする
const ws = fs.createWriteStream("toCopyFile.md");
const r = readline.createInterface({
input : fs.createReadStream(`template.md`);
output: ws
});
r.on("line", (line) => {
ws.write(line);
});
template.md
をtoCopyFile.md
にコピーするコードです
元になるマークダウンファイルも用意します
---
title: Template
slug: template
---
## template.md
これを先程の対話型のコードと合わせます
組み合わせる
上記の2つを組み合わせてscript.js
を作ります
// script.js
import readline from "readline";
import fs from "fs";
const q = readline.createInterface({
input: process.stdin,
output: process.stdout
});
q.question("File Path: ", (a1) => {
q.question("Title: ", (a2) => {
const ws = fs.createWriteStream(`${a1}.md`);
const r = readline.createInterface({
input: fs.createReadStream(`template.md`),
output: ws,
});
r.on("line", (line) => {
// titleの行を書き換える
if (line.startsWith("title:")) {
line = `title: ${a2}`;
}
// slugの行を書き換える
if (line.startsWith("slug:")) {
line = `slug: ${a1}`;
}
ws.write(`${line}\n`);
});
console.log(`code ${a1}.md`);
q.close();
});
});
これで
node script.js
を実行すると実行するディレクトリにあるtemplate.md
を読み込んで、File path:
とTitle:
で答えたファイル名のファイルを作成して、タイトルを書き換えてくれます
VSCodeのコマンドが通るのであればコンソールに表示させたcode posts/ファイル名.md
を実行することでファイルが開けます
child_process
とか使えばjavascriptを実行するだけでファイルまで実行してくれるようにすることもできます