一个简单的用 TypeScript 写 Egg 应用的模板:egg-ts-boilerplate。 配合《如何在 Egg.js 中使用 TypeScript》这篇文章,对 TypeScript 和模板中的基本概念做了简单介绍。 希望能帮助对 TypeScript 不熟悉的人快速上手。 欢迎意见。
不错。我是新建了个src目录容纳原来的app目录,然后把/app作为build输出目录。这样编译后的js就不会和源码挤在一块儿了
狂赞。先 mark 明天看。
@atian25 我觉得把源码和编译目录分开似乎更好些。 我是把app目录移动到 /src/ 目录下,然后设置 tsconfig 的输出目录为 /app
想问一下, 现在vscode调试ts顺畅吗, 很早前尝试过不好用.
其实可以在egg-bin上做一层编译错误自动爆炸的处理。typescript最大的毛病就是不能编译时期报错,所以之后我会改一个egg-bin,让他能在重启运行时编译一下ts,然后跑不过就爆炸…
@waitingsong 这也是个不错的办法。另外我想问下你会在本地编译好部署,还是在服务器编译部署呢?
赞,自己写了个egg的小项目,正准备改成ts
@brickyang 可以在本地编译好后打包部署,也可以在服务器上用git hook执行脚本来自动部署
@215566435 tsc执行编译的时候要报错啊,只不过不会停止编译
@waitingsong 也可以设置报错就停止编译哦
- 我们之前有一个小的示例,回头大家的实践多分享,看看如何一起进化,https://github.com/eggjs/examples/tree/master/hackernews-async-ts
- @brickyang 部署肯定是要在构建期,一般是在 CI 上,而不能在服务器。别告诉我你们现在还在服务器上
npm install
- @waitingsong 我个人是倾向于在源目录,反正在 VSCode 等 IDE 里面是可以默认过滤掉的。
- @215566435
egg-bin
可以直接继承然后添加逻辑的,这块可以实践下,目前我个人对构建到别的目录这个方向没太多想法。
@waitingsong 我也这样尝试过,想问下有vscode的调试方案么
@waitingsong 报错是一个,重点是能炸出来。
@atian25 通常是在 Docker 里有一层是 npm install。很想了解下你们在工作中 coding 之后的到上线的流程,方便时希望能看到分享。
@brickyang docker 构建也只是在 CI 期的,最终上线就是一个容器而已。
docker 这块我这边有个同学正在梳理文档了,回头搞完放出来
第二个问题是:我们应用中的 controller 和 service 等,是从 Egg 的 Controller 、Service 等类继承来的。这些自定义内容在 Egg 的 index.d.ts 中是没有的,所以需要写在自己的 index.d.ts 文件中。
这块我之前的一个想法是,通过 egg-bin 或 vscode 插件的形式,实时监控源码,自动生成这个 d.ts
@atian25 不错,使用egg-bin生成d.ts的方案我也在做,包括能够让ts编译爆炸出来。
赞,可以给个仓库我 Review 观摩下
不需要放到一个文件的,可以直接在 typings/**/*.d.ts
@atian25 代码是部署在客户的服务器上,希望只带有编译后的js代码。 如果区分src/dist目录那么可以在编译完成打包时过滤掉src目录。如果不区分以eggjs目前的目录结构(ts)方式是否有更好的办法来解决呢?
@waitingsong 构建完成后,再 rm -rf **/*.js
呗… 这块我目前没有太多的想法,只是觉得分目录的话,工具方面需要看怎么去适配。
@waitingsong 如果用 Docker 倒是可以只打包 js 文件进去。不过我觉得这些不是很有必要严格统一,适合自己最好。
请教下.
如果不运行npm install
(线上服务器安装依赖, 同yarn
), 那么你们是怎么部署的,能分享一些经验吗。
我能想到的有3个方案:
- 使用Webpack打包成为单文件.js
- 使用其他工具打包成成为单个可执行文件
- 使用yarn打包开发环境下的源码和依赖.tar, 再传到服务器上
但是各都有缺点
- 静态文件怎么算,比如html/image。有
raw-loader
可以打包纯文本,可是图片呢,是打包成为base64的。 - 打包成为单个可执行文件, 但是C++组件怎么算?我发现有些工具可以,有些不行。还有一些静态文件,这是个黑盒子,你不知道里面做了什么
- yarn打包开发环境的源码和依赖,再传入服务器。这也是yarn开发的初衷吧?避免
npm install
下来的和开发环境不一致,保证开发环境和生产环境运行一致。稍微能接受这种方式
那么大佬们,是怎么部署的呢,求分享下。
@axetroy Docker
@brickyang 一样的,docker不也要安装依赖
我指的是不要在服务器上 npm install
:
- 在集群情况下,你甚至无法保证 2 台服务器上安装下来的依赖是一致的。
- 我们不锁版本:『为什么我不使用 shrinkwrap(lock)』
- 遇到线上问题,无法快速回滚。
- 因为你切回旧包后,还是要等待
npm install
,万一遇到的问题是包问题,或者网络慢,就死翘翘了,不能快速止血
- 因为你切回旧包后,还是要等待
推荐的做法:
- GitLab MR 合并后
- 触发 CI 构建,执行单元测试
- 测试通过后,直接把构建后的源码目录打 tar 包
- 打包 docker,发布到某个运维系统
- 上线的时候就只是简单的替换这个镜像。
@axetroy Docker 安装依赖是在构建期啊,你把 Image 放到任何一台服务器上都可以保证依赖是可靠的
@waitingsong 笔误,tar 包,简单的说,就是线上要跑的内容,在构建期已经完全确定,并打包为一个 tar 包或者是一个 docker 实例。在线上直接分发使用。
@atian25 感謝分享,我也想請教您關於部署這方面問題,目前公司小專案確實是部署上去才 npm install (汗 想請教server打包成docker image後,多一層docker運行server不知道性能上是否有下降? 幅度會很多嗎? 謝謝
@sj82516 不会的,可以去了解下 docker,没那么复杂。
@sj82516 Docker 会多用一点内存,不过影响不大,没到拖服务器性能的程度
@atian25 明白了 顺便问下 egg 对https支持稳定不, 相对于 http 是否有性能上明显下降
@waitingsong 搞明白一点, Express,Koa,Egg 这些框架没什么特殊的,它们只是在 Node http server 之上的封装。
它们对 https 的支持,就是 Node 对 https 的支持而已。
至于 https 和 http 的性能差别,这个是协议本身就有的损耗。
@atian25 明白了, 多谢
内网服务器部署TLS,基本只有自签发证书。不知道是否能签发 192.168.0.*
这种C段通配证书呢? 域名通配证书的 * 是通配左侧,ip的是否支持通配右侧
@waitingsong 我是这么搞的。
@hellopao 不好意思,没看懂。。
当 Egg 遇到 TypeScript,收获茶叶蛋一枚 https://zhuanlan.zhihu.com/p/35334932