Nocobase快速上手 - 开发第一个插件

在前面的几篇博文中,记录了在Nocobase中配置collection和界面,这篇文章开始插件的开发。插件可以扩展Nocobase的业务能力,解锁更强大的功能。

环境搭建

创建插件需要配置nocobase的开发环境,笔者采用的是clone 官方代码repo的方式。

git clone https://github.com/nocobase/nocobase.git

代码clone到本地后,进入代码目录,安装依赖.
要注意项目要求的node版本是v18+,并且需要Yarn 1.22.x

推荐使用nvm来管理node版本随时切换,很多前端项目都有对node版本的要求

nvm

nvm安装非常简单,仅仅需要一个命令即可

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

然后就可以用nvm安装最新版本的node

nvm install 22

nocobase

在nocobase目录下安装依赖前,最好先配置yarn mirror,否则很可能因为网络问题造成失败

yarn config set registry https://registry.npmmirror.com/
yarn config set sqlite3_binary_host_mirror https://npmmirror.com/mirrors/sqlite3/

安装依赖

yarn install --fronzen-lockfile

依赖安装后,需要初始化一下应用

yarn nocobase install

然后启动应用

yarn dev

如果没有报错信息正常启动,并且在http://localhost:13000地址上能访问,那么开发环境就搭建成功了。

创建插件

创建插件使用yarn pm命令,pm是Nocobase的插件管理器。

yarn pm create @my-project/plugin-hello

创建完成后,可以在界面上看到创建的后的插件,如果没有显示,可以尝试用如下命令进行一次add操作:

yarn pm add @my-project/plugin-hello

可以在界面上看到新添加的插件
Nocobase plugin

第一行插件代码

新增的插件还没有任何功能,我们根据官方文档来编写第一行插件代码.

首先是新建. /src/server/collections/hello.ts文件

import { defineCollection } '@nocobase/database';

export default defineCollection({
  name: 'hello',
  fields: [{ type: 'string', name: 'name' }],
});

然后修改. /src/server/plugin.ts文件

import { Plugin } from '@nocobase/server';

export class PluginHelloServer extends Plugin {
  async afterAdd() {}

  async beforeLoad() {}

  async load() {
    // This is just an example. Expose all actions of the hello collection to the public
    this.app.acl.allow('hello', '*', 'public');
  }

  async install() {}

  async afterEnable() {}

  async afterDisable() {}

  async remove() {}
}

export default PluginHelloServer;

这两个文件分别定义了插件所使用的collection和这个collection的使用权限.
修改文件后,需要对插件进行激活来进行测试。

yarn pm enable @my-project/plugin-hello

测试插件

插件创建成功后,我们用curl进行简单的测试确认其可以正常工作

curl --location --request POST 'http://localhost:13000/api/hello:create' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Hello world"
}'

这段命令是向插件中定义的hello collection中插入数据。数据新增成功后,查询验证:

curl --location --request GET 'http://localhost:13000/api/hello:list'

小结

本文记录了Nocobase开发插件的简单步骤,通过新建插件,修改代码,初步熟悉插件开发的过程。虽然这个插件还没有什么具体的业务功能,但不失为一个好的开端。
更多功能正在探索中,欢迎交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/671569.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Centos7】解决 CentOS 7 中出现 “xx: command not found“ 错误的全面指南

【Centos7】初探xx:command not found解决方案 大家好 我是寸铁👊 【Centos7】解决 CentOS 7 中出现 “xx: command not found” 错误的全面指南✨ 喜欢的小伙伴可以点点关注 💝 前言 经常有小伙伴问我,xx:command not found怎么办&#xff1…

GPT-4o如何重塑AI未来!

如何评价GPT-4o? 简介:最近,GPT-4o横空出世。对GPT-4o这一人工智能技术进行评价,包括版本间的对比分析、GPT-4o的技术能力以及个人感受等。 GPT-4o似乎是一个针对GPT-4模型进行优化的版本,它在性能、准确性、资源效率以及安全和…

http请求方法get和post的区别

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 目录 关于http请求方法get和post的区别真正区别存在问题的区别 关于http请求方法get和post的区别 真正区别 实际上二者差异不大,在http里面,使用get的场景,使用post也可以;同样,使用post的场景…

22 、系统安全

新的服务器到手,部署服务器初始化。 1、配置ip地址 网关dns解析(static)内网和外网。 2、安装源,外网(在线即可),内网(只能用源码包编译安装)。 3、磁盘分区&#xff…

浅谈安科瑞ASJ10-LD1A智能漏电继电器的设计与应用-安科瑞 蒋静

一 产品简介 功能 ASJ10-LD1A安科瑞智能电力继电器 剩余电流保护可与低压断路器或低压接触器等组成组合式的剩余电流动作保护器,主要适用于交流50Hz,额定电压为400V及以下的TT或TN系统配电线路,防止接地故障电流引起的设备和电气火灾事故&a…

数字水印 | 盲水印嵌入:量化索引机制 QIM

目录 1 什么是量化索引调制?1.1 为什么使用 QIM?1.2 QIM 的算法思想1.3 什么是量化操作?1.4 论文中对 QIM 的介绍 2 盲水印论文中的实际应用2.1 均匀量化器2.2 对论文的分析 😇说明:本文中的载体信息 原始信息…

VS远程调试步骤

1、背景 生产环境是没有开发环境的,,那生产环境上运行的程序,出了问题,如何远程调试它? 可以借助VS的远程调试。 2、步骤 1)将E:\VS2019\install\Common7\IDE\Remote Debugger目录整体拷贝到生产环境机器…

vs2019 c++20 规范的 STL 库的智能指针 shared、unique 、weak 、auto 及 make_** 函数的源码注释汇总,和几个结论

智能指针的源码都在 《memory》 头文件中。因为头文件太长,再者本次整理是基于以前的零散的模板分析。故相当于抽取了该头文件中关于智能指针的源码进行分析,注释。 (1 探讨一)当独占指针指向数组时,其默认的删除器是…

微服务-Nacos-安装-集成SpringBoot

微服务-SpringCloud-ALibaba-Nacos Nacos 是阿里巴巴推出的 SpringCloud的组件 官网:什么是 Nacos 主要是为了解决微服务的架构中 服务治理的问题服务治理就是进行服务的自动化管理,其核心是服务的注册与发现。 服务注册:服务实例将自身服务信息注册…

【vue】vue2项目将npm包管理器修改为yarn包管理器

【vue】vue2项目将npm包管理器修改为yarn包管理器 1.删除node_modules文件夹、package-lock.json文件 2.全局安装yarn npm install -g yarn3.安装项目依赖 yarn install如果执行yarn install 报类似以下这种版本不兼容错误,执行 yarn config set ignore-engines …

[SWPUCTF 2023 秋季新生赛]Junk Code

方法一:手动去除 将所有E9修改为90即可 方法二:花指令去除脚本 start_addr 0x0000000140001454 end_addr 0x00000001400015C7 print(start_addr) print(end_addr) for i in range(start_addr,end_addr):if get_wide_byte(i) 0xE9:patch_byte(i,0x9…

【激光雕刻机上位机的成品软件】核心功能 - 参考wecreat

Software | WeCreat MakeIt! https://wecreat.com/pages/software 体验软件如上,自行下载体验。 价格5W,本人为 wecreat 创立之初上位机软件开发的核心员工,详细内容私信我。 由于该公司快3个月未给我竞业补偿了,对我不仁那我…

华为昇腾310 ATC模型转换、CPP推理案例使用

参考: https://cnloong.blog.csdn.net/article/details/139293689 https://gitee.com/ascend/samples/tree/master/inference/modelInference/sampleResnetQuickStart/cpp https://developer.huawei.com/consumer/cn/forum/topic/0203148227811150357 官方图像分类案例下载: …

数据结构与算法笔记:基础篇 - 链表(上):如何实LRU缓存淘汰算法

概述 本章聊聊 “链表” 这个数据结构。学习链表有什么作用? 我们先来讨论一个经典的链表应用场景,那就是 LRU 缓存淘汰算法。 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中有着非常广泛地应用,比如场景的 CPU 缓…

字符串-将str1编辑成str2所需最小代价(hard)

一、题目描述 二、解题思路 该题目使用动态规划的思想来解决问题 刚开始我还在想,删除添加的操作可以等价为替换操作,如果替换操作的Cost大于删除添加组合操作的Cost之和就需要把 rcdcic。 但是在动态规划中,如果对三种不同的操作方式进行…

C++ 的 Tag Dispatching(标签派发) 惯用法

目录 1.概述 2.标准库中的例子 3.使用自己的 Tag Dispatching 3.1.使用 type traits 技术 3.2.使用 Type_2_Type 技术 4.Tag Dispatching的使用场景 5.总结 1.概述 一般重载函数的设计是根据不同的参数决定具体做什么事情,编译器会根据参数匹配的原则确定正确…

域内攻击--->基于资源的约束委派(RBCD)

不同于约束和非约束委派,基于资源的约束性委派可以就难的多了!! 前方高能 ,准备上车!! 目录 1.基于资源的约束性委派(RBCD) 2.谁能设置RBCD 3.机器入域账号的普及 4.域树的搭建 5.配置RBCD 6.通过域创…

【前端部署——vercel】部署next.js使用了prisma的项目

部署流程参考 https://blog.csdn.net/qq_51116518/article/details/137042682 问题 PrismaClientInitializationError: Prisma has detected that this project was built on Vercel, which caches dependencies. This leads to an outdated Prisma Client because Prisma’s …

kali系统baopoWiFi密码

kali系统baopoWiFi密码,仅供学习 取决强大的密码字典,如果别人密码设置的足够安全,也无法破解成功,并不是100%破解 一、准备一个无线网卡,需要免驱动,最好知道频率2.4HGZ还是5.0GHZ 二、插上USB接口,vmware模拟器选择连接虚拟机 三、输入命…

Java Spring Boot 从必应爬取图片

获取图片主要就是通过必应图片页面控制台的元素,确认图片和标题在哪个类中(浏览器 F12) 引入依赖 这里需要引入两个依赖 jsoup 和 hutool maven依赖网站地址:Maven Repository: Search/Browse/Explore (mvnrepository.com) 挑选…