范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

使用nodejs批量给文章添加二维码图片

  大家好,我是前端西瓜哥。
  因为最近公众号没有涨粉,所以打算给我的个人博客网站(blog.fstars.wang)上的所有文章底部添加公众号的二维码。
  为此我打算用 nodejs 写个批量处理文件的简单脚本。
  我的具体需求是这样的。
  文章都是用 markdown 文件写的,这是一种纯文本的文件格式,并且都位于 posts 文件夹下。
  现在我们需要将 所有 markdown 文件的末尾都加上我的公众号二维码图片 ,即加上下面这种格式的内容。 ![img](xx.jpg)
  其中有个模板文件,不需要添加图片,所以我们要设置一个  黑名单 。
  此外  有些文章已经加了该图片,我们也需要将这些文章排除在外 ,防止文章出现两张相同图片。同时也能防止不小心多次执行脚本,导致不可逆的修改。 代码实现
  我们先看完整的代码。  import * as fs from "fs/promises"; import path from "path";  const dirPath = "script/folder"; const img = "![img](xx.jpg)"; const addedContent = "  " + img; const blacklist = ["b.md"]  const appendText = async () => {   console.log("=====开始=====");   const files = await fs.readdir(dirPath)    for (let file of files) {     // 命中黑名单,跳过     if (blacklist.includes(file)) continue;     // 转换为正确的绝对路径     file = path.resolve(dirPath, file);     console.log("正在处理文件:", path.resolve(dirPath, file));     // 判断是否已含有图片。如果有,跳过     const content = await fs.readFile(file, { encoding: "utf8" });     if (content.includes(img)) continue;     // 追加写入     await fs.appendFile(file, addedContent);   }     console.log("=====结束====="); }  appendText();
  我们先设置好要用到的几个变量,然后将它们全都放到文件开头。  const dirPath = "content/posts"; // 要处理文件的所在目录  const img = "![img](xx.jpg)"; // 图片内容 const addedContent = "  " + img; // 添加时,前面加俩换行符 const blacklist = ["b.md"] // 黑名单
  放到开头是为了让我们在需要时快速修改,符合相关代码高内聚原则。如果这些变量流散在代码逻辑中,当我们要改配置时,就要找上半天。
  这里我引入了 nodejs 内置的 fs 库。fs 指的是文件系统(File System),fs 库就是专门用来处理文件的这么一个库。
  fs/promise 则是fs 的 promise 版,将原来 fs 方法的回调参数移除,然后返回一个 promise。
  我们就用这个 promise 版的 fs,因为它能写出同步形式的代码,可读性会更好。
  fs.readdir() 方法能够读取目录内容,返回一个字符串数组,里面是所有的文件名。  const files = await fs.readdir(dirPath)
  接下来我们就去遍历这个数组。这里有个 初学者容易犯的错误,就是会去使用 forEach 方法。
  因为 forEach 是 for 循环的一层封装,会执行传入的回调函数。但 forEach 的这个函数并不是 async 函数,所以是无法等待 await 方法执行完的。
  async 函数其实是挺新的特性,forEach 则是存在了很长时间,当时 forEach 并没有考虑 async 这种东西,为了兼容,以后也不会。
  所以你需要使用原生的 for 循环方法。for 和 for...of 都可以。
  然后我们检查一下文件名是否在黑名单中,如果在,跳过此轮循环,直接进入下一轮。  for (let file of files) {   // 命中黑名单,跳过   if (blacklist.includes(file)) continue;   /// ... }
  然后我们要将文件名、和它所在的目录名组合,生成一个绝对路径。  // 转换为正确的绝对路径 file = path.resolve(dirPath, file);
  直接使用文件名是不行的,因为 脚本会以被执行时所在的工作目录进行路径计算的,文件名是个相对于指定目录的相对路径,相对工作目录不一定是正确的。
  接着是使用 fs.readFile 读取文件内容,记住要将 encoding 设置为 "utf8",否则你会拿到一个二进制的内容。
  如果文件中已经有图片了,就跳过。  // 判断是否已含有图片。如果有,跳过 const content = await fs.readFile(file, { encoding: "utf8" }); if (content.includes(img)) continue;
  否则在文件末尾通过 fs.appendFile 方法添加图片内容。  // 追加写入 await fs.appendFile(file, addedContent);执行脚本
  脚本写好了,我们准备执行了。
  首先为了可以吃后悔药,我强烈建议你想将文件通过版本控制软件(如 git),先存一个档。当脚本配合得不是很好时,我们可以轻松愉快地回滚到修改前的版本。当然拷贝一份作为备份也行。
  总之,备份很重要。
  改改配置,然后执行。
  成功!
  大家可以去我的 blog.fstars.blog 看看,现在所有文章下都有这二维码图片了。
  我是前端西瓜哥,欢迎关注我。

PHP基础字符串分割explode与strsplit函数PHP字符串分割用于分割字符串。相关函数如下explode()使用一个字符串分割另一个字符串strsplit()将字符串分割到数组中explode()本函数为implode()的反公立医院触网还需迈过几道坎?在近日举办的互联网医院高质量发展高峰论坛上,国家卫生健康委有关负责人介绍,截至今年6月,我国互联网医院超过1600家。数据显示,其中参与方来自公立医院的占比69。5,而民营医院占比从苹果到华为,为什么今年高端产品扎堆MiniLED?2020年以来,MiniLED在电视领域取得了广泛应用,今年苹果在iPadPro12。9英寸款上加入的MiniLED技术(苹果称其为Liquid视网膜XDR屏),更是将MiniLE台积电18a工厂气体污染原因揭晓氧气中被混入氩气IT之家8月9日消息7月末,有消息称由台积电位于中国台湾的南科18a工厂出现的问题,导致停产。台积电确认了这一消息,并表示南科部分厂房来自供应商的部分气体疑似受到污染。由于晶圆18英语学科可以取消了目前英语是全世界通用语言,超过50个国家把英语作为官方语言,而且还没包括把英语作为第二或第三语言的国家,尤其是欧洲精英国家,英语普及率相当高。那为什么说英语还要取消呢?从1983年自定义SpringBootSwagger中ApiModel默认名称前言项目使用的springfoxswagger22。9。2版本在Spring中集成swagger文档功能,需要通过ApiModel注解修饰出入参的类,但是如果有两个不同包下的相同名改变我生活的,是网络收音机,是海弦WR26网络收音机一改变我生活的,是海弦WR26网络收音机海弦WR26是一款令人吃惊十分出色的一种新品类收音机,即网络收音机,大多数人可能对此一无所知。此机技术先进,用起来异常简单。根据它的质量来看郑州还需要做几次核酸检测?自费做过核检,还需要三检吗?关于第三轮全员核酸检测与健康码问题相关解答今天群里各位家人都在讨论关于核酸检测的问题,现就大家关心的重点问题进行统一汇总,给大家总结出来十问十答爱心1前两次在郑州做了全员核酸,现在创小报80期阿里公布处罚结果腾讯微视裁员NASA模拟火星生活创小小的创小报第80期8月9日,热文三分钟,知晓天下事。每日心语别人再好,也是别人。自己再不堪,也是自己,独一无二的自己。只要努力去做最好的自己,一生足矣。今日关键词四川暴雨受灾字百度智慧城市全景图亮相全球数字经济大会据中国信息通信研究院在2021全球数字经济大会发布的全球数字经济白皮书显示,中国数字经济增速全球领先,智慧城市作为数字基建的核心要素之一,备受关注。数字基建与生态发展论坛,作为全球再创里程碑华为HarmonyOS升级用户超5000万对于华为来说,HarmonyOS推进速度依然是很迅速,当然用户的升级热情也是很高。据央视新闻最新报道称,截至8月6日,华为鸿蒙系统的升级用户,已经超过5000万,这距离上一次的人数
支付宝送红包,苹果绿了经常在AppStore中购买App或是其他消费的小伙伴,想必都知道苹果会不定时联合其他品牌推出AppStore充值9折活动。有充值需求的小伙伴,都能在这个活动中白嫖到一些福利。由于乐橙专业家用摄像机TP7S,快给您的家上个安心锁吧近几年,家庭盗窃案件只增不减,甚至有一些不法分子图谋不轨,导致了更多的悲剧发生。。家是我们的港湾,不能让它被破坏,一定要提前预防,阻止悲剧的发生。市面上的家用摄像机可以说是琳琅满目36氪首发向金融机构提供IT运维保障服务,争锋科技数千万元A轮融资近日,36氪获悉,金融行业IT系统运维保障企业南京争锋信息科技有限公司(下称争锋科技)宣布完成A轮数千万元融资,投资方为咏圣资本。本次融资资金,主要用于人才引进产品矩阵的研发市场拓微信一物一码红包系统红包系统定制开发微信一物一码红包,相信大家在平常购物消费时候也见过,对此并不陌生。在互联网时代,一物一码红包是以一物一码系统为载体,以红包奖励实物奖奖励,积分奖励方式来吸引用户进行扫码。而通过一物苹果准备推出新款Mac电脑搭载下一代M2芯片财经网科技4月15日讯,据新浪科技消息,根据开发者日志,苹果已开始对几款搭载下一代M2芯片的新款Mac电脑进行广泛的内部测试。苹果正致力于开发搭载自主处理器芯片性能更强大的电脑产品苹果正在M2芯片曝光,至少四颗本文转载自半导体芯闻公众号彭博社报道,根据开发者日志,苹果已开始对几款配备下一代M2芯片的新Mac机型进行广泛的内部测试,这是其推动使用自研处理器制造更强大计算机的一部分。日志显示向日葵UUpro评测不用ROOT系统,就能远程控制手机让其大放异彩前言随着手机更新换代的速度越来越快,很多年轻人都会隔三岔五的换新机,因此每家每户都会有那么几部淘汰下来的旧手机,而这些旧手机的最好归宿,就是给家里的老人继续使用,毕竟老年人对手机性特斯拉Model概念机曝光前后双摄像头配骁龙8Gen1作为美国科技的两大巨头,苹果和特斯拉在商业上几乎没有交集。然而,随着5G技术和物联网技术的日益成熟,过去设备之间的孤岛形式正在被打破。对于任何互联网设备来说,独处变得越来越困难。来盘点一下即将要发布的几款手机时间步入四月,新机机潮已经到来,在这个月里手机是一个接一个的发布,从联通发布优畅享50plus到黑鲨5系列,再从荣耀play6T系列到vivo发布XnoteXfold和pad,四月你的手机号码月租是多少?现在所用号码,是10年刚踏入社会工作办理的,应该算联通第一批无月租号码,白号什么都没有,可以单独开通来电显示,一天一毛钱,随时可以关闭,以前分潍坊五区,区内每分钟一毛二,区外3毛,手机连接电脑读取文件手机连接电脑读取文件一打开手机USB调试模式打开手机系统设置二下载驱动保存到电脑,请记住保存的位置三用数据线将手机连接到电脑强烈建议大家使用手机原配的USB数据线!!四安装驱动如果