Node.js 用一个小脚本实现新建文章模板

2023-05-29 14:04:33 浏览数 (2)

之前为了偷懒写的小脚本,类似于 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 命令来执行脚本:

代码语言:javascript复制
node ./scripts/new-post.js new-blog-post

但是每次都要输入路径就比较繁琐,这里推荐将命令直接写入 package.json,然后用 npm run 来执行。 例如:

代码语言:javascript复制
{
  //...
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "new": "node ./scripts/new-post.js",
  },
  //...
}
代码语言:javascript复制
npm run new new-blog-post

然后就会生成一个这样的 .md 文件:

代码语言:javascript复制
---
title: "New blog post"
date: "2023-05-17 21:44:17"
categories:
  - 
---

here

---

其中这个被两个分割线包围的 here 是我用来识别并输出成首页摘要的,很笨的方法,嗯。

0 人点赞