跳到主要内容

使用或创建模块

zenweb 的设计思想就是模块化,所有功能都可互相解偶并独立配置,以满足不同业务场景中的灵活使用。

使用其他模块

除了在 zenweb 包中已经包含的预设模块,还有很多可选模块。

如需使用模块可参考文章:使用其他模块

以下列出所有非预设模块:

模块介绍
@zenweb/cors跨域支持
@zenweb/upload文件上传支持
@zenweb/xml-bodyXML Body 解析
@zenweb/metric健康信息收集
@zenweb/schedule定时任务
@zenweb/validationJSONSchema 验证
@zenweb/mysqlMySQL 数据库支持
@zenweb/repositoriesZenORM Repositories
@zenweb/tenant数据库多租户支持
@zenweb/template模版渲染
@zenweb/form表单构建与数据验证
@zenweb/grid表格构建与过滤控制
@zenweb/sentrySentry 错误收集
@zenweb/websocketWebSocket 支持
@zenweb/ratelimit请求频次限制
@zenweb/cache缓存

创建自定义模块

在项目中往往需要把一些可复用的功能模块化,本章将介绍如何创建一个自定义模块。

例如我们需要创建的模块叫做 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