非 Serverless 环境使用一体化
在 Midway Serverless 2.0 中,我们支持了 Web 全栈应用的开发。
在后续的开发中,你可以将你的 Web 应用部署至任意的服务器,来为用户提供服务。
项目创建
请先安装 @midwayjs/cli
。
# 如果是 npm v6
$ npm init midway --type=koa-hooks-react my_app
# 如果是 npm v7
$ npm init midway -- --type=koa-hooks-react my_app
$ cd my_app
目录结构
生成后的目录结构如下
.
├── bootstrap.js // 应用启动
├── index.html
├── jest.config.js
├── midway.config.ts // Midway 配置文件
├── package.json
├── src
│ ├── App.css
│ ├── App.tsx
│ ├── apis // 后端文件(可在 midway.config.ts 修改)
│ │ ├── configuration.ts
│ │ └── lambda // Api 文件
│ │ ├── index.test.ts
│ │ └── index.ts
│ ├── favicon.svg
│ ├── index.css
│ ├── logo.svg
│ └── main.tsx
├── tsconfig.json
└── vite.config.ts // Vite 配置文件
本地运行
在项目根目录运行 npm run dev
即可启动项目,启动后,Vite 将输入可访问的地址。
复制地址到浏览器即可访问
页面显示如下画面则代表启动成功:
你可以修改 /src/apis/lambda 下的函数,尝试极为直观的函数式开发方式与极快的热更新所带来的流畅体验。
单元测试
在应用根目录中,你可以运行 npm run test
来运行单元测试。
单元测试运行截图
在单元测试中,我们提供了便捷的 runFunction 方法,帮助你快速完成单元测试,就像调用一个普通函数一样。
import { createApp, HooksApplication } from '@midwayjs/hooks-testing-library';
import api from '.';
describe('test new features', () => {
let app: HooksApplication;
beforeAll(async () => {
app = await createApp();
});
afterAll(async () => {
await app.close();
});
it('runFunction', async () => {
expect(await app.runFunction(api)).toMatchInlineSnapshot(`
Object {
"message": "Hello World",
"method": "GET",
}
`);
});
});
构建
在项目中,我们也提供了现成的 npm run build
命令,来快速构建项目。
构建结束后,可以通过 node bootstrap.js
来运行项目。
访问 http://localhost:7001
,就可以看到页面了。
线上部署
在完成后构建后,你可以按你喜欢的方式将应用部署至任意的服务器中。
在此,我们推荐使用 [pm2](https://www.npmjs.com/package/pm2)
来启动和管理应用。