手把手教你hexo插件编写

最近搞了一个hexo博客,但是图片外链失败,所以写个插件解决掉该问题,插件编写很简单

开始编写代码

1、首先进入hexo博客目录,在node_modules目录下,新建插件目录

如下图,我的插件名字:hexo-add-img-attr

新建目录

2、打开终端,进入到该目录下,执行npm init命令来引导创建package.json文件

a. 输入完命令后,会让你输入名字:我这里输入hexo-add-img-attr
输入名字
b. 回车后,输入版本号,这里我输入:1.0.0
版本号
c. 回车后,输入描述
image.png
d. 输入入口文件,这里默认index.js 回车即可
e. test命令,忽略,回车即可
f. git仓库的地址,有就填上,没有就忽略,回车即可
g. 关键词,按实际填写
h. 作者,按实际填写
i. 许可证,我填写的是MIT

按回车后,会打印出填写的信息,让确认是否无误


确认
k. 确认信息,输入yes,就会在当前目录生成package.json文件

创建完package.json文件后,创建js代码入口文件,这里是index.js

3、编写index.js的代码

//hexo的钩子函数
hexo.extend.filter.register('after_post_render',(data)=>{
    
    console.log("this is from hexo-add-img-attr:");

    return action(data)

}, 0);

//从html数据中找到所有img标签,添加referrerPolicy的值为no-referrer
const htmlparser2 = require("htmlparser2");
function action(data) {

  let modifiedHtml = '';  
  let inImgTag = false;  
  
  const parser = new htmlparser2.Parser({  
    onopentag(name, attribs) {  
      if (name === 'img') {  
        // 添加或修改referrerPolicy属性  
        if (!attribs.hasOwnProperty('referrerPolicy')) {  
          attribs.referrerPolicy = 'no-referrer';  
        }  
        modifiedHtml += `<${name} ${Object.keys(attribs).map(k => `${k}="${attribs[k]}"`).join(' ')}>`;  
        inImgTag = true;  
      } else {  
        modifiedHtml += `<${name} ${Object.keys(attribs).map(k => `${k}="${attribs[k]}"`).join(' ')}>`;  
      }  
    },  
    ontext(text) {  
      if (!inImgTag) {  
        modifiedHtml += text;  
      }  
    },  
    onclosetag(tagname) {  
      if (tagname === 'img') {  
        inImgTag = false;  
      }  
      modifiedHtml += `</${tagname}>`;  
    },  
    onend() {  
      // 这里不需要特别处理,因为我们会在外部返回modifiedHtml  
    }  
  });  
  
  parser.write(data.content); // 假设data.content包含HTML内容  
  parser.end();    
  data.content = modifiedHtml;  
  return data;  
} 

至此代码就完成了,下面开始使用下

4、使用插件

在hexo博客目录下找到packge.json文件,在末尾添加新的依赖
"hexo-add-img-attr": "^1.0.0"

添加的时候注意上一行的末尾价格逗号,不然json格式就错误了。


添加依赖

5、重新运行hexo博客

终端,进入到hexo博客目录,也就是packge.json文件所在的目录

依次执行如下命令

//分别是清理缓存、生成静态文件、启动服务
hexo clean   
hexo g
hexo s

在我们的插件代码中,打印了日志:console.log("this is from hexo-add-img-attr:"); 执行代码时,可以在终端上看到输出this is from hexo-add-img-attr

在浏览器访问 http://localhost:4000 打开带有图片的文章,就可以看到图片加载出来了

插件就写完了,还有一件事没做,写README.md文件。

6、在插件目录下,新建README.md文件

填写使用说明等信息。主要是给用户看的。
这个文件会显示在 npmjs 你的模块界面,对用户更友好

接下来就可以发布插件了

发布插件到npm官方

一、首先注册npm账号

注册很简单,准备邮箱,注册后会要求你输入邮件的一次性密码,登录的时候也要求邮箱中收到的一次性密码

注册地址(https://www.npmjs.com/signup

温馨提示:如果打不开网站,切换到手机4g试试

注册参考
https://npm.nodejs.cn/creating-a-new-npm-user-account

二、终端登录npm

在登录之前,先查看当前源,是否是官方的,若不是需要恢复

查看当前源命令:npm config list


image.png

我的是官方的。

恢复官方源命令:注意源链接一定是 https 的。

npm config set registry 'https://registry.npmjs.org'

确认官方源之后,输入: npm login

输入命令后,会让你通过浏览器登录,按回车直接打开浏览器,或者复制终端上的登录链接,自行去登录。登录成功后,终端上就会有反应。

三、发布插件

执行命令:npm publish

网好的话,很快就成功了,不然就用梯子吧。
![发布(https://upload-images.jianshu.io/upload_images/14458179-c8c02f6a551e0e3c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

至此,插件就发布完成了。

四、使用已发布的插件

进入到hexo博客目录,确认刚才的packge.json中包含了我们的插件

"hexo-add-img-attr": "^1.0.0"

没有就添加上。

然后终端执行 npm install 从线上安装我们的插件。

至此,恭喜你拥有了自己的npm插件。

参考链接

https://blog.csdn.net/godread_cn/article/details/122031503
https://blog.csdn.net/weixin_30725315/article/details/96453424
https://www.cnblogs.com/yuNotes/p/17714067.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容