egg插件开发
初始化插件,可以直接使用脚手架来初始化插件的代码
mkdir plugin-test && cd plugin-test
npm init egg --type=plugin
npm i
在初始化过程中填入相关信息,本次初始化的插件名称叫做egg-plugin-test。
初始化好插件内容之后就可以进行内容的开发了,例如本次我将会在hepler中拓展一个叫做testPlugin的方法,那么需要在插件目录下创建文件/app/extent/helper.js
,并加入一下测试代码
'use strict';
module.exports = {
testPlugin() {
console.log('current is test plugin');
}
};
然后进行本地的插件测试,我们在需要引用该插件的服务进行插件的“插入”
npm link 插件路径
插件插入之后还需要启用,那么在服务目录的/config/plugin.js
文件中开启该插件(本人使用的均为module.exports的方法,如果是别的方法引入的可以适当进行调整)
pluginTest: {
enable: true,
path: 'egg-plugin-test',
}
启用之后就可以进行调用了,因为是在helper的拓展,因此直接调用
this.ctx.helper.testPlugin()
如果正常调用的话,说明插件使用成功。
npm包发布私仓
首先要登录私仓:
npm login --registry=私仓地址
然后输入用户名和密码还有个人Email进行登录,登录成功之后,进行发布
npm --registry 私仓地址 publish
发布成功之后就能像egg的其他官方插件一样进行使用了,但是要注意的是,要先配置私仓的使用地址
npm set registry 私仓下载npm包的地址
配置私仓之后运行以下内容就能进行插件下载了。
npm i --save 插件名
备注
特别的,如果直接进行插件的开发,然后在另一个服务目录通过npm link
的方式进行插件的开发测试的话,比较麻烦。
npm link有自动更新机制,但是触发需要服务重启或者热更新,如果不重新触发更新机制的话,服务下node_modules目录下的对应插件的代码还是旧的,这样就比较浪费时间
如果将插件的开发放到服务的app目录下(例如放在app/plugin/egg-plugin-test下),因为VScode的特性,app目录下的代码只要有改动则会进行热更新,这样的话只要修改保存一次插件的代码,就可以将插件代码同步到服务下的node_modules中去。
在plugin.js中的配置如下:
'use strict';
const path = require('path');
/** @type Egg.EggPlugin */
module.exports = {
pluginTest: {
enable: true,
// package: 'egg-plugin-test',
path: path.join(__dirname, '../app/plugin/egg-plugin-test'),
},
};
更多egg插件开发的内容可以查看egg的官方文档中的:
渐进式开发:<https://eggjs.org/zh-cn/tutorials/progressive.html>