跳到主要内容

新增 @midwayjs/skill-midway

· 阅读需 1 分钟
Harry Chen
Maintainer of Midway

我们新增了 @midwayjs/skill-midway

这个包提供两类能力:

  • 把 Midway Skill 安装到项目里的 AI 工具目录
  • 在本地查询 Midway 的文档、API、包信息和 changelog

Release 4.0.0

· 阅读需 6 分钟
Harry Chen
Maintainer of Midway

今天,我们正式发布 Midway 4.0。

这是一次跨度很大的版本升级。它不是一次“把版本号从 3 改成 4”的常规发布,而是一次面向未来几年 Node.js 服务研发方式的重新整理:更清晰的启动机制、更统一的函数式能力、更明确的组件边界,以及更适合现代全栈协作的开发体验。

Release 4.0.0-beta.10

· 阅读需 2 分钟
Harry Chen
Maintainer of Midway

这是 Midway 4.0 的第十个 beta 版本。

本次版本新增一次性脚本执行组件与 commander 命令行组件,并补充了相关文档说明。

🚀 主要新增功能

单次执行组件(One-shot)

新增 @midwayjs/one-shot 组件,用于在应用启动后执行一次性脚本逻辑,支持在 onServerReady 生命周期中触发。

示例:

import { Configuration, Inject } from '@midwayjs/core';
import * as oneShot from '@midwayjs/one-shot';
import { Framework } from '@midwayjs/one-shot';
import { SyncUserScript } from './script/syncUser';

@Configuration({
imports: [oneShot],
})
export class MainConfiguration {
@Inject()
framework: Framework;

async onServerReady() {
await this.framework.runScript(SyncUserScript, { id: 42 });
}
}

更多说明请参考 单次执行组件文档

Commander 命令行组件

新增 @midwayjs/commander 命令行组件,提供命令注册、参数解析、上下文创建与中间件链支持,并内置基于 enquirer 的交互式提问能力。

示例:

import { Command, CommandRunner } from '@midwayjs/commander';

@Command({ name: 'hello', arguments: '<name>' })
export class HelloCommand implements CommandRunner {
async run([name]: string[]) {
return `hello ${name}`;
}
}

更多说明请参考 Commander 组件文档

🐛 修复与改进

  • 文档更新:validation 组件升级说明、one-shot 组件文档、commander 目录结构示例

Release 4.0.0-beta.9

· 阅读需 2 分钟
Harry Chen
Maintainer of Midway

这是 Midway 4.0 的第九个 beta 版本。

在这个版本中,我们新增了基于 piscina 的后台任务组件,支持 CPU 密集型任务的处理,同时升级 Zod 至 v4 版本,并修复了 Swagger UI 等问题。

🚀 主要新增功能

Background Task (Piscina) 支持

我们新增了 @midwayjs/piscina 组件,基于 piscina 封装,提供了多线程后台任务处理能力。这使得 Midway 应用可以轻松处理 CPU 密集型任务,而不会阻塞主线程。

你可以使用装饰器快速定义一个后台任务:

import { IPiscinaTask, PiscinaTask } from '@midwayjs/piscina';

/**
* 计算任务
*/
@PiscinaTask('calculate')
export class CalculateTask implements IPiscinaTask {
async execute(payload: { a: number; b: number; operation: 'multiply' | 'add' }) {
const { a = 0, b = 0, operation = 'multiply' } = payload || {};

if (operation === 'multiply') {
return a * b;
} else {
return a + b;
}
}
}

并在服务中调用它:

@Inject()
piscinaFramework: PiscinaFramework;

// ...
const result = await this.piscinaFramework.runTask('calculate', {
a: 10,
b: 20,
operation: 'add'
});

更多详细用法请参考 Piscina 组件文档

Zod v4 支持

我们升级了验证组件以支持 Zod v4 版本,现在你可以使用 Zod v4 的新特性来进行参数校验。

🐛 修复与改进

  • 修复了 Swagger UI displayOptions 渲染字符串的问题
  • 修复了 View 组件中异步渲染触发时机的问题
  • 修复了 Busboy 和 Upload 组件的校验逻辑
  • 新增了服务发现 (Service Discovery) 的文档说明
  • 依赖更新:
    • 更新 bullmq 至 v5.66.4
    • 更新 express 至 v4.22.1
    • 更新 grpc-js 至 v1.14.3

Release 4.0.0-beta.2

· 阅读需 2 分钟
Harry Chen
Maintainer of Midway

这是全新的 Midway 4.0 的第二个 beta 版本。

在这个版本中,我们带来了一些重要的新功能和改进,主要包括 MCP 组件的全面支持以及 mock 组件的测试体验优化。

🚀 主要新增功能

MCP (Model Context Protocol) 支持

我们正式加入了对 MCP 的完整支持。MCP 是由 Anthropic 开发的开放标准协议,用于将 AI 模型与外部数据源和工具安全连接。

Midway 现在提供了:

  • 完整的 MCP 服务器框架封装
  • 支持多种传输方式:stdio、stream-http、sse
  • 基于装饰器的开发体验
  • 与现有 HTTP 框架(Express、Koa、Egg.js)的无缝集成

使用 Midway 可以快速创建 MCP 服务,为 AI 应用程序提供标准化的数据访问和工具调用接口。

import { Tool, IMcpTool } from '@midwayjs/mcp';
import { z } from 'zod';

@Tool('databaes-tool', {
description: 'A tool to query user information from the database',
inputSchema: {
name: z.string().describe('name to query'),
}
})
export class DatabaseTool implements IMcpTool {
async execute(args: { name: string }) {
// 模拟数据库查询
return {
content: [{
type: 'text',
text: [{ id: 1, name: args.name }]
}],
}
}
}

更多关于 MCP 的详细使用方法和配置选项,请参考 MCP 组件文档

Mock 组件测试改进

针对开发者测试体验的优化,我们为 mock 组件的 createApp 方法增加了完整的生命周期支持:

  • 新增 onReadyonStoponConfigLoadonServerReadyonHealthCheck 等生命周期钩子

这些改进让测试代码能够更准确地反映真实运行环境的行为,提升测试的可靠性。

const app = await createApp(join(__dirname, 'fixtures', 'base-app'), {
onReady: async () => {
console.log('应用准备就绪');
},
onStop: async () => {
console.log('应用停止');
}
});