宝哥软件园

详细解释如何用typescript开发koa2的两三件事

编辑:宝哥软件园 来源:互联网 时间:2021-08-28

前言

我最近写了一个博客项目,前端使用vue typescript元素-ui,后端使用koa2 typescript mongoDB。写这个博客的目的是为了在后台写作过程中遇到一些问题,需要查很多资料才能解决。所以总结权也是一种记录,可以给别人一个完整的参考。

基本信息

这里列出的是一些将要使用的配置信息。毕竟一直在更新,以后可能某个版本不支持。

“节点mon”:“1 . 18 . 3”,“ts-node”:“7 . 0 . 1”,“typescript”:“3 . 1 . 1”“节点”:“9 . 0 . 0”的问题描述

这次遇到的问题都和typescript有关。Koa2问世已久,发展基本成熟。但是这次找资料的时候,很少发现是用typescript开发的。即使是,也很简单,解决不了我的问题。

反正用ts开发koa,因为不涉及webpack打包编译,会遇到几个问题:

实时编译刷新,重启服务器调试器,这在前期确实困扰了我。用node开发最简单的就是node xxx.js,再进一步就是热更新。但是ts引入后,要考虑编译和实时刷新。毕竟,这不像手动重启服务器,每次修改代码都要手动编译。

解决办法

这是我的解决方案。我稍后会解释为什么会这样写。如果来不及看或者只是想知道答案,就抄一下。

注意' : 'ts节点。/app/index.ts ',' start ' : ' nodemon-watch app/index . js ',' build' : 'tsc ',' debugger' : 'nodemon - watch。/app-e-ts,Tsx-exec节点-inspect-r ts-node/register。/app/index.ts ',' watch-serve ' : ' node mon-watch '。/app/* */*-e ts,tsx-exec ts-node。/app/index

npm运行观察

此命令用于使用ts-node在本地启动服务器。看ts-node的描述。

TypeScript执行和node.js的REPL,支持源映射。适用于[emailprotected]=2.0。

这是一个用于node.js中执行和交互的typescript环境,简单来说就是为ts而生的!

那么这个命令就是根据当前入口运行程序。唯一的问题是它不支持热更新。所以通过。

npm运行构建npm运行启动

这两者放在一起是因为它们高度相关。可以说是相互依存的关系。

第一个命令非常简单,就是编译当前的ts项目文件。需要在tsconfig.json中配置输出目录.让我给你看看我手术的结果。

App是我的项目文件。运行该命令后,将在根目录中创建一个dist文件夹来存储我编译的js文件。当你打开它的时候就是这样。

现在我们来说说第二个命令,就是根据编译后的文件条目启动服务器。而且支持热更新,不过,注意这里有一个但是,它只支持编译文件的热更新,其实就是用js来开发koa的启动命令,这时候,源文件中的任何修改都不会有效果,所以通过。

npm运行监视服务

重点来了,这是解决问题的关键!

完美解决了热更新、实时编译、服务器重启等问题。并且很好的提升了开发体验。

有中文博客提到过这个解决方案,但是第一次用的时候不知道为什么会用,导致后期出现了一些低级错误,就不提了。然而,没有人真正解释这个命令的含义。直到昨天遇到问题,我才正视这个恶魔。

Nodemon和ts-node之前已经介绍过了,这里只解释具体的配置。本来我明白有两个不同的命令用逗号隔开,但是我太天真了。让我们看一下文档的介绍。

默认情况下,nodemon使用。js,mjs,咖啡,咖啡。litcoffee还有。json扩展。如果使用- exec选项,monitorapp.py nodemon将监控扩展名为. py的文件。但是,您可以使用-e(或- ext)开关指定自己的列表,如so:

nodemon -e js,jadeNow nodemon将在对带有扩展名的目录(或子目录)中的文件进行任何更改时重新启动。js,杰德。

默认情况下,nodemon会吃几种文件类型,即。js,mjs,咖啡,咖啡。litcoffee还有。JSON,但是。我在这里使用的ts不在默认的支持文件中,所以-e在这里用来指定我需要扩展的文件类型,这里的逗号只是用来分隔不同的类型。这里提到了configuration - exec。根据原文,如果文件app.py以nodemon开头,扩展名类型。默认情况下将支持py。文件里还有别的东西。

nodemon还可以用来执行和监控其他程序。nodemon将读取正在运行的脚本的文件扩展名,并监视该扩展名。js如果没有nodemon . js :

nodemon-exec“python-v”。/app.pyNow nodemon将以详细模式用python运行app.py(注意,如果您没有向exec程序传递参数,则不需要引号),并使用。py分机。

这里,除了默认支持的扩展之外,该配置还可以支持与运行脚本相同的扩展。而且,如果扩展程序不需要传递参数,也不需要写单引号。

总而言之,一个命令用于增加支持的文件类型,一个配置用于执行和监控其他类型的程序。

至于参数-手表。

默认情况下,nodemon监控当前的工作目录。如果您想控制该选项,请使用- watch选项添加特定路径:

nodemon-watch app-watch libs app/server . js

现在,nodemon只有在。/app或。/libs目录。默认情况下,nodemon将遍历子目录,因此没有必要显式包含子目录。

不要使用unix globbing传递多个目录,例如- watch。/lib/*,这样不行。每个被监视的目录都需要一个- watch标志。

有两点需要注意。一个是nodemon将监控默认情况下执行当前脚本文件的文件夹。另一种是如果你想指定一个特定的文件夹,你需要一些详细的路径,比如绝对路径或者相对路径。切勿使用通配符。因此,我在命令行上的使用是无效的,也是违反规则的,但如果我必须这样写,也不会影响操作。

原来,这就是结局。但是,我昨天用了一个npm包,想看看它是怎么工作的,所以遇到了调试器的问题,这迫使我不得不认真理解这个命令。

npm运行调试器

基本的调试方法网上都有,就不多说了。问题是导入typescript后,一切都乱套了。我首先尝试了以下命令:

nodemon - inspect - watch。/app -e ts,tsx - exec ts-node。/app/index . ts ' ' nodemon-watch-inspect。/app-e-ts,Tsx-exectets-node。/app/index.ts'' nodemon-watch。/app-e-ts,tsx-execttes-node-inspect。/app/index.ts '这些可以自己运行,但无论如何都没用。然后,我今天一直在想这件事,我换了几个关键词谷歌找这两个地方。

https://stackoverflow.com/questions/49042830/为什么节点检查器在我使用nodemon和ts节点时不启动

https://github.com/TypeStrong/ts-node/issues/537

感谢stackoverflow和github,看起来你们互相验证的时候就能明白是怎么回事了。

以下是参数-r:

这是用来预加载模块的,这个参数可以多次使用。在我写的命令中,ts-node/register是一个模块,或者说宽松一点,register是ts-node下的一个方法。在这种情况下,ts-node的寄存器模块是逐节点预加载的,以运行ts程序并启动调试器模式。

附言

到目前为止,编译、热更新和调试器中的坑应该已经被踩出来了。希望后面的人看了我写的文章以后,少走弯路。也希望大家多多支持我们。

更多资讯
游戏推荐
更多+