部署
构建打包
由于 typescript 的特殊性,本地开发可以有 ts-node 等类似的工具进行开发,而在服务器端运行的时候,我们希望可以通过 js 来运行,这中间就需要编译工具。
幸好 Typescript 官方提供了 tsc 工具来帮助这个过程,而编译时会自动调用 tsconfig.json
来做一些编译时处理,midway 默认提供了一份该文件,用户也可以进行自定义。
同时,在脚手架中,我们提供了 build
命令帮助用户更好的生成文件。
TIP
推荐在发布前本地进行 build,并通过 npm run start_build 进行启动尝试,减少服务器端构建错误。
"start_build": "npm run build && NODE_ENV=development midway-bin dev"
通过 start_build 启动的应用,将会自动本地编译,然后启动 dist 目录中的文件。
如果有一些自定义的文件需要在打包时拷贝,可以参考 自定义打包
通过内置的启动文件
midway 提供了一个内置的 server.js
来作为应用的启动入口,在大部分情况下,可以通过直接 require 该文件来进行启动。
比如使用 pm2 的场景下。
// xxx.js
require('midway/server');
或者使用我们 pandora 的场景下,会生成 procfile.js 文件,内容如下。
'use strict';
module.exports = pandora => {
pandora
.fork('[your app name]', require.resolve('midway/server'));
};
通过内置的 server 文件,可以自动启动应用。
egg-scripts 方式
在以往的 egg 应用中,egg-scripts 也可以直接启动,但是不支持 启动参数传递 。
具体的文档请查看 使用 egg-scripts 应用部署。
启动参数传递
我们设计了一个机制,在 package.json 中配置服务器设置,只有依赖了 midway/server
文件才可以使用。
支持的参数见 启动参数,同时,midway 框架额外增加了几个参数。
- typescript {boolean} 如果为true,则会开启 ts 模式,加载 src 或者 dist 目录,默认内部会进行判断,无需手动处理
- srcDir {string} 源码路径,默认为 src
- targetDir {string} 编译后路径,默认为 dist
{
"midway-server-options": {
"workers": 1,
"port": 3000
}
}
如果觉得不足,还可以使用 js 或者 json 文件进行定义。
{
"midway-server-options": "./server.json" // xxx.js
}
// in json
{
"workers": 1
}
// in js
module.exports = {
workers: 1
}