posted: 2019/02/23
NetlifyCMSからブログ作るのが面倒になってきたのCLIから作れるようにするのを作った
もはや本末転倒感がありつつ、NetlifyCMSのadmin画面が調子悪いので、CLIで作るようなスクリプトを書いた
inquirerが便利。あとslugはnetlify-cmsがほぼ独自実装しているっぽくて、dashfyというのが近い挙動だった。
ymlのmatterの生成はgray-matterを使えば良い。
VSCodeを開いてるのは
もう少しマトモに対応を考えるんだと、GitHubのページを開いてしまうというのアリかもしれない
ymlのmatterの生成はgray-matterを使えば良い。
VSCodeを開いてるのは
exec
でやっててこの辺は雑と言えば雑。もう少しマトモに対応を考えるんだと、GitHubのページを開いてしまうというのアリかもしれない
const inquirer = require("inquirer")
const dashify = require("dashify")
const { DateTime } = require("luxon")
const grayMatter = require("gray-matter")
const fs = require("fs")
const exec = require("child_process").exec
const now = DateTime.local()
const convert = ({ title, slug, tags }) => {
const timestamp = now.toFormat("yyyyMMdd000000")
const dir = "contents/pages/blog"
const filename = `${dir}/${timestamp}-${slug}.md`
const matter = grayMatter.stringify("", {
templateKey: "blog-post",
title,
date: now.toUTC().toISO(),
tags: tags.split(" ")
})
return {
filename,
matter
}
}
inquirer
.prompt([
{
name: "title"
},
{
name: "slug",
default: ({ title }) => dashify(title, { condense: true })
},
{
name: "tags"
},
{
type: "confirm",
name: "confirm",
default: "Y",
message: answer => {
const { filename, matter } = convert(answer)
return [
"",
`Filename: ${filename}`,
"Matter:",
`${matter}`,
"OK?"
].join("\n")
}
}
])
.then(answer => {
const { filename, matter } = convert(answer)
fs.writeFileSync(filename, matter)
exec(`code ${filename}`)
})
あとはこれをpackage.jsonに仕掛ければ完了
"blog": "node ./bin/create.js"