之前为了偷懒写的小脚本,类似于 hexo new
的小指令。
首先过一遍代码:
代码语言:javascript复制const fs = require('fs');
// 获取命令行传入的参数
const args = process.argv.slice(2);
function generatePost(title) {
// 处理标题格式
function capitalizeFirstWordLetter (str) {
return str.charAt(0).toUpperCase() str.slice(1);
};
const sentenceCaseTitle = capitalizeFirstWordLetter(title);
const formattedTitle = sentenceCaseTitle.split('-').join(' ');
// 获取当前日期和时间
const date = new Date();
const Y = date.getFullYear();
const M = date.getMonth() 1 < 10 ? `0${date.getMonth() 1}` : date.getMonth() 1;
const D = date.getDate() < 10 ? `0${date.getDate()}` : date.getDate();
const h = date.getHours() < 10 ? `0${date.getHours()}` : date.getHours();
const m = date.getMinutes() < 10 ? `0${date.getMinutes()} ` : date.getMinutes();
const s = date.getSeconds() < 10 ? `0${date.getSeconds()}` : date.getSeconds();
const time = `${Y}-${M}-${D} ${h}:${m}:${s}`;
// 构建 frontMatter
const frontMatter = `---
title: "${formattedTitle}"
date: "${time}"
categories:
-
---
here
---
`
// 将 frontMatter 写入文件,路径按需修改
fs.writeFile(`./src/sources/posts/${title}.md`, frontMatter, (err) => {
if (err) throw err;
console.log(`Created ${title}.md!`);
});
}
generatePost(args[0]);
很简单的小脚本,看一下注释应该就能理解。
然后我们要执行它,有很多方法,可以直接用 node
命令来执行脚本:
node ./scripts/new-post.js new-blog-post
但是每次都要输入路径就比较繁琐,这里推荐将命令直接写入 package.json
,然后用 npm run
来执行。 例如:
{
//...
"scripts": {
"dev": "next dev",
"build": "next build",
"new": "node ./scripts/new-post.js",
},
//...
}
代码语言:javascript复制npm run new new-blog-post
然后就会生成一个这样的 .md
文件:
---
title: "New blog post"
date: "2023-05-17 21:44:17"
categories:
-
---
here
---
其中这个被两个分割线包围的 here
是我用来识别并输出成首页摘要的,很笨的方法,嗯。