使用或创建模块
zenweb 的设计思想就是模块化,所有功能都可互相解偶并独立配置,以满足不同业务场景中的灵活使用。
使用其他模块
除了在 zenweb 包中已经包含的预设模块,还有很多可选模块。
如需使用模块可参考文章:使用其他模块
以下列出所有非预设模块:
模块 | 介绍 |
---|---|
@zenweb/cors | 跨域支持 |
@zenweb/upload | 文件上传支持 |
@zenweb/xml-body | XML Body 解析 |
@zenweb/metric | 健康信息收集 |
@zenweb/schedule | 定时任务 |
@zenweb/validation | JSONSchema 验证 |
@zenweb/mysql | MySQL 数据库支持 |
@zenweb/repositories | ZenORM Repositories |
@zenweb/tenant | 数据库多租户支持 |
@zenweb/template | 模版渲染 |
@zenweb/form | 表单构建与数据验证 |
@zenweb/grid | 表格构建与过滤控制 |
@zenweb/sentry | Sentry 错误收集 |
@zenweb/websocket | WebSocket 支持 |
@zenweb/ratelimit | 请求频次限制 |
@zenweb/cache | 缓存 |
@zenweb/msgpack | MessagePack 输出支持 |
创建自定义模块
在项目中往往需要把一些可复用的功能模块化,本章将介绍如何创建一个自定义模块。
例如我们需要创建的模块叫做 myMod
(注意:模块名不要和系统中已经使用的模块名冲突)
最简单的嵌入式模块
嵌入式模块指的是直接在项目代码的 setup
方法中定义模块。此种模块不需要复用,功能也比较简单的情况下使用。
import { create, SetupHelper } from 'zenweb';
create()
// 这里注意,函数必须要有名称,函数的名称就是模块默认名称
.setup(function mymod(setup) {
// 模块处理逻辑
})
.start();
独立模块
独立模块可以在项目中使用独立文件,也可以发布为标准 npm 包在多个项目之间共享使用
项目中的独立模块
创建文件 src/module/mymod.ts
src/module/mymod.ts
import { SetupFunction } from '@zenweb/core';
interface MyOption {
}
// 必须导出为 default function
export default function setup(option: MyOption): SetupFunction {
// 这里可以做模块安装之前的一些处理
return function mymod(setup) { // 函数名称作为模块的默认名称
// 模块处理逻辑
setup.debug('option: %o', option); // 打印模块设置选项
// 关于 setup 的用法可以查看 SetupHelper 的方法注释
}
}
// 如需在 Context Core 中定义挂载项目,可以使用如下方式
declare module '@zenweb/core' {
interface Core {
mymod: MyModClass;
}
interface Context {
mymod: MyModClass;
}
}
可发布的独立模块
首先创建一个 npm 项目:
yarn init
安装开发依赖项:
yarn add --dev zenweb typescript rimraf cross-env ts-node
编辑 package.json
{
"exports": "./dist/index.js",
"types": "./dist/index.d.ts",
"scripts": {
"vscode": "yarn dlx @yarnpkg/sdks vscode",
"build": "rimraf dist && tsc",
"prepack": "yarn run build",
"dev": "cd example && cross-env DEBUG=\\* ts-node app"
},
"files": [
"dist"
]
}
创建 tsconfig.json
文件
{
"extends": "zenweb/tsconfig-module",
"compilerOptions": {
"outDir": "dist"
},
"include": [ "src/**/*" ]
}
创建入口文件 src/index.ts
代码参考 项目中的独立模块
本地演示与开发测试
创建 example
目录用于模块使用演示与本地开发测试
在 example
目录中创建 app.ts
example/app.ts
import { create } from 'zenweb';
import mymod from '../src';
create()
// 安装本地模块
.setup(mymod())
.start();
如需控制器测试,可以创建 example/app/controller/demo.ts
在 example/app
目录下的结构就和普通 webapp
项目一致
发布包
yarn npm publish