artusjs / spec Goto Github PK
View Code? Open in Web Editor NEWSpec for Artus.js.
Home Page: https://www.artusjs.org
License: MIT License
Spec for Artus.js.
Home Page: https://www.artusjs.org
License: MIT License
related artusjs/core#72
现在可以想到的有:
如题。
pm2
等工具进行多进程部署@conf-js/cluster
的扩展包进行多进程部署许多场景下,私有化部署时需要基于开源 Plugin 进行扩展(例如生命周期),需要提供扩展 Plugin 私有化的能力,而非只能 fork 代码全量修改后发包。
例如开源版本的 @artus/mysql
,本土化部署时 mysql 连接前需要进行一些异步定制操作再继续,希望无需 fork @artus/mysql
代码,而是编写一个 @private/mysql
继承 @artus/mysql
进行扩展,这样开源版本的 @artus/mysql
即作为 Npm 依赖位于 @private/mysql
中,只需要关注扩展的私有定制逻辑即可。
// framework-cli.config.ts
export default {
port: 3000,
build: {
engine: 'swc',
bundle: true, // Single file bundle
},
devServer: {
hmr: true,
}
}
考虑增加以下两个明确的路径约束:
初版 Spec 中,我们约定了 Exception 的声明、抛出机制;
但捕获一节仅保留了临时的 onerror 实现,受制于 Koa 执行机制,并不完善,因此并未直接实现。
在上层框架开发实践中,我们发现,对于用户需要关注的异常大致有两类:
try-catch
try-catch
(执行时机、代码冗余)ExceptionFilter
的机制来用于在执行期处理机制需要包括:
Trigger
或 ExceptionHandler
中增加公共逻辑,用于统一执行 Filter需讨论的模糊问题:
done()
的 API,主动终止执行序列(API 不优雅)Spec 修改草案见 #27 中的 Markdown
减少属性动态挂载,开发时类型显式声明
min-application
,允许参与路由控制、支持业务逻辑、插件中使用中间件等。enable
和 disable
。PluginBase
基类,入口类似的 apply
、create
方法。/service
/middleware
能力boilerplate
规范,以及开发插件注入、测试、集成方法,甚至包含插件发布的工具链。形似 koa 的中间件无法使用 inject 进行注入,使用上与 service 无法对齐;故而新增中间件类型:
@Middleware({ enable: true })
注解@MV({ middlewares: [] })
注解需要考虑一下是否在 @artus/pipeline
中添加对类中间件支持?
对于全局中间件,参考 nestjs 的语法,支持 Middleware 注解,参数为是否启用,通过 pipeline.run(ctx)
运行
import { ArtusInjectEnum, Inject } from '@artus/core';
import { ArtusxContext, ArtusxNext, Middleware } from '@artusx/core';
@Middleware({
enable: true,
})
export default class CheckAuthMiddleware {
@Inject(ArtusInjectEnum.Config)
config: Record<string, string | number>;
async use(ctx: ArtusxContext, next: ArtusxNext): Promise<void> {
const { data } = ctx.context.output;
data.authed = false;
console.log('middleware - checkAuth', ctx.context, this.config);
await next();
}
}
函数中间件,在 http method 中使用,接收参数为函数中间件数组,通过 koa.use(middlewares)
方式运行
middleware.ts
import { ArtusxContext, ArtusxNext } from '@artusx/core';
export default async function traceTime(_ctx: ArtusxContext, next: ArtusxNext): Promise<void> {
console.time('trace');
await next();
console.timeEnd('trace');
}
controller.ts
import { ArtusInjectEnum, Inject } from '@artus/core';
import { GET, POST, Controller, MW } from '@artusx/core';
import type { ArtusxContext } from '@artusx/core';
import traceTime from '../middleware/traceTime';
@Controller()
export default class HomeController {
@Inject(ArtusInjectEnum.Config)
config: Record<string, string | number>;
@MW([traceTime])
@GET('/')
async home(ctx: ArtusxContext) {
ctx.body = 'home';
}
}
使用文档
开发者&用户需要通过 core 的测试用例才能了解如何开发插件以及应用;对于 scanner / loader / plugin 机制,文档的介绍也相对的比较简单,仍然需要进一步参考示例才能更好的使用。
社区生态
artus 的设计理念,无需项目提供太多插件;但对于使用者而言,从零到一并不容易,故而仍然需要提供一些常用插件,便于用户快速的使用并且了解框架设计。
使用文档
除当前核心概念的解释外,增加开发者 、用户视角的使用文档
社区生态
https://github.com/artusjs/artusx
通过 x 项目提供社区常见服务如 koa / express 插件,以及使用示例,便于大家使用快速上手
讨论下怎么抽象交互模型,下面是我目前的一些想法。
底层协议无关并不是没有任何限制,这里可能依旧主要面向 C/S 的交互场景(或者有更好的想法):
目前的 C/S 的交互场景自身是存在一些可以抽象出来的公共特征,以及流水线式的逻辑处理天然有统一的切面处理需求,结合目前版本的实践,进一步进行可扩展的设计:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.