前言最近在写一个博客项目。前端使用vue+typescript+element-ui,后台使用koa2+typescript+mongoDB组合。写这篇博??客的目的也是为了在写后台的过程中遇到一些问题,查了很多资料解决。所以做个总结和记录是对的,可以作为别人完整的参考。这里列出的基本信息是一些将要用到的配置信息。毕竟,它一直在更新。可能这里说的某个版本以后不支持了。"nodemon":"^1.18.3","ts-node":"^7.0.1","typescript":"^3.1.1""node":"9.0.0"本次遇到的问题描述问题其实都和打字稿有关。koa2出来很久了,开发也基本成熟了,但是这次找资料的时候很少发现是用typescript开发的。就算有,也很简单,解决不了我的问题。言归正传,使用ts开发koa,由于不涉及webpack打包编译,所以会遇到几个问题:编译实时刷新,重启服务端调试器。nodexxx.js,进一步热更新。但是引入ts后,需要考虑编译和实时刷新的问题。毕竟不像每次改一点代码就手动重启服务器然后手动编译。解决方案以下是我的解决方案。后面会说为什么要这样写。如果您没有时间阅读它或只想得到答案,只需复制它即可。“watch”:“ts-node./app/index.ts”,“start”:“nodemon--watchapp/index.js”,“build”:“tsc”,“debugger”:“nodemon--watch./app-ets,tsx--execnode--inspect-rts-node/register./app/index.ts","watch-serve":"nodemon--watch'./app/**/*'-ets,tsx--exects-node./app/index.ts"下面一一说说。npmrunwatch命令是使用ts-node在本地启动一个服务器。看一下ts-node的描述。用于node.js的TypeScript执行和REPL,支持源映射。适用于typescript@>=2.0。这是一个在node.js中执行和交互的typescript环境,简单来说就是为ts而生!!那么这条命令就是根据当前入口运行程序。唯一的问题是不支持热更新。所以通过。npmrunbuild&&npmrunstart放在一起是因为相关性比较高。可以说这种关系是相互依存的。先说第一个命令,很简单。就是编译当前的ts工程文件,需要在tsconfig.json中配置输出目录。我会告诉你我的手术结果。app是我的工程文件,运行命令后会在根目录下创建一个dist文件夹,用来存放我编译好的js文件,打开即可。下面说说第二条命令,根据编译文件入口启动服务器。并且支持热更新,但是,注意有个but,它只支持编译后的文件热更新,其实就是用js开发koa启动命令,那么源文件中的任何修改都不会生效这一次,Sopass。npmrunwatch-serve的重点来了,这才是解决问题的关键!!!完美解决了代码热更新、实时编译、服务器重启等问题。大大提升了开发体验。这个方案在一些中文博客上提到过,但是一开始用的时候不知道为什么要这么用,导致后期出现一些看起来很低级的错误,所以我这个就不提了然而,没有人真正解释这个命令的含义。直到昨天遇到问题,我才正视这个恶魔。nodemon和ts-node在上一篇文章中都有介绍,这里只说明具体的配置。本来我的理解是有两个不同的命令用逗号隔开,但是我太天真了。看一下文档的介绍。默认情况下,nodemon查找扩展名为.js、.mjs、.coffee、.litcoffee和.json的文件。如果使用--exec选项并监控app.py,nodemon将监控扩展名为.py的文件。但是,您可以使用-e(或--ext)开关指定您自己的列表,如下所示:nodemon-ejs,jadeNownodemon将在目录(或子目录)中扩展名为.js、.js的文件发生任何更改时重新启动。jade.nodemon有几个默认吃的文件类型,分别是.js、.mjs、.coffee、.litcoffee和.json,而我这里用的.ts默认不支持文件,所以这里用-e指定我需要展开的文件类型,这里的逗号只是用来分隔不同的类型。那么这里提到了--exec配置。原文说如果使用nodemon启动app.py文件,默认会支持扩展类型.py。除此之外,文档中还写了其他的东西。nodemon也可以用来执行和监控其他程序。如果没有nodemon.json:nodemon--exec"python-v"./app.pyNownodemon将使用详细的python运行app.py,nodemon将读取正在运行的脚本的文件扩展名并监视该扩展名而不是.js模式(请注意,如果您没有将args传递给exec程序,则不需要引号),并查找扩展名为.py的新文件或修改后的文件。这里说明一下,除了默认支持的扩展之外,通过这个配置,可以支持与运行脚本相同的扩展。而且,如果扩展程序不需要传递参数,就不需要写单引号。综上所述,一个命令用于添加支持的文件类型,一个配置用于执行和监控其他类型的程序。至于---watch参数。默认情况下,nodemon监视当前工作目录。如果您想控制该选项,请使用--watch选项添加特定路径:nodemon--watchapp--watchlibsapp/server.jsNownodemon只会在./app或./库目录。默认情况下,nodemon将遍历子目录,因此无需显式包含子目录。不要使用unixglobbing传递多个目录,例如--watch./lib/*,它不会工作。每个目录都需要一个--watch标志。这里有两点需要注意,一是nodemon默认会监控当前脚本文件执行的文件夹,二是如果要指定具体的文件夹,需要一些详细的路径,比如绝对路径或者绝对不要使用相对路径和通配符。所以,我的命令行使用是无效的,也是不合规矩的,但是这样写不影响运行。本来就到此结束了,但是昨天用了一个npm包,想看看效果如何,于是遇到了调试器的问题,这也是逼着我认真理解这条命令的原因。npmrundebugger的基本调试方法网上到处都是,我就不说了。问题是导入打字稿后,一切都变得混乱了。我首先尝试了以下命令:'nodemon--inspect--watch./app-ets,tsx--exects-node./app/index.ts''nodemon--watch--inspect./app-ets,tsx--exects-node./app/index.ts''nodemon--watch./app-ets,tsx--exects-node--inspect./app/index.ts'你可以试试自己运行这些,但无论如何都行不通。然后今天一直在想这个事情,换了几个关键字google了一下,找到了这两个地方。https://stackoverflow.com/que...https://github.com/TypeStrong...多亏了stackoverflow和github,互相确认后好像明白是怎么回事了。这里是-r参数:用于预加载一个模块,这个参数可以多次使用。在我写的命令中,ts-node/register是一个模块,或者不严格的说,register是ts-node下的一个方法。这里是使用node预加载ts-node的register模块来运行ts程序并开启debugger模式。至此,编译、热更新、调试器的坑应该就结束了。希望看过我写的文章的人能够少走弯路。如果有不对的地方,请留言指正。我暂时不应该发布所有的源代码,至少在我写完之前。只是酱紫,
