部署

构建打包

由于 TypeScript 的特殊性,本地开发可以有 ts-node 等类似的工具进行开发,而在服务器端运行的时候,我们希望可以通过 js 来运行,这中间就需要编译工具。

幸好 TypeScript 官方提供了 tsc 工具来帮助这个过程,而编译时会自动调用 tsconfig.json 来做一些编译时处理,midway 默认提供了一份该文件,用户也可以进行自定义。

同时,在脚手架中,我们提供了 build 命令帮助用户更好的生成文件。

TIP

推荐在发布前本地进行 build,并通过 npm run start_build 进行启动尝试,减少服务器端构建错误。

  1. "start_build": "npm run build && NODE_ENV=development midway-bin dev"

通过 start_build 启动的应用,将会自动本地编译,然后启动 dist 目录中的文件。

如果有一些自定义的文件需要在打包时拷贝,可以参考 自定义打包

通过内置的启动文件

midway 提供了一个内置的 server.js 来作为应用的启动入口,在大部分情况下,可以通过直接 require 该文件来进行启动。

比如使用 pm2 的场景下。

  1. // xxx.js
  2. require('midway/server');

或者使用我们 pandora 的场景下,会生成 procfile.js 文件,内容如下。

  1. 'use strict';
  2. module.exports = pandora => {
  3. pandora
  4. .fork('[your app name]', require.resolve('midway/server'));
  5. };

通过内置的 server 文件,可以自动启动应用。

egg-scripts 方式

在以往的 egg 应用中,egg-scripts 也可以直接启动,但是不支持 启动参数传递

具体的文档请查看 使用 egg-scripts 应用部署部署 - 图1

启动参数传递

我们设计了一个机制,在 package.json 中配置服务器设置,只有依赖了 midway/server 文件才可以使用。

支持的参数见 启动参数部署 - 图2,同时,midway 框架额外增加了几个参数。

  • typescript {boolean} 如果为true,则会开启 ts 模式,加载 src 或者 dist 目录,默认内部会进行判断,无需手动处理
  • srcDir {string} 源码路径,默认为 src
  • targetDir {string} 编译后路径,默认为 dist
  1. {
  2. "midway-server-options": {
  3. "workers": 1,
  4. "port": 3000
  5. }
  6. }

如果觉得不足,还可以使用 js 或者 json 文件进行定义。

  1. {
  2. "midway-server-options": "./server.json" // xxx.js
  3. }
  4. // in json
  5. {
  6. "workers": 1
  7. }
  8. // in js
  9. module.exports = {
  10. workers: 1
  11. }