nodemon实现Typescript项目热更新的示例代码


Posted in Javascript onNovember 19, 2019

我们都知道nodemon可以直接用来在开发环境下运行js文件,可以在文件改变时自动刷新和重启服务器。但是最近刚好在学typescript,所以就想使用ts来写,也想达到同样的效果,总结一下方法,大概有如下几种:

nodemon+tsc:

这个方法很简单,首先通过tsc将我们的ts文件编译到dist目录下,然后再通过nodemon直接运行dist目录下的文件即可。至于ts的输出目录相关配置可在tsconfig.js中设置。

tsc && nodemon --watch dist/index.js

但是这种方式有个缺点,就是nodemon只监听了dist目录,可能有时候你修改了源码并不能触发热更新,另外还有个问题就是多了一个dist目录中转,感觉不爽。

nodemon+ts-node:

命令如下:

nodemon -e ts,tsx --exec ts-node ./index.ts"

大概意思就是监听文件增加ts、tsx两种文件类型,使用ts-node运行index.ts文件。

当然,上述参数是设置在命令行中的,也可以在nodemon.json中设置:

{
 "verbose": false,
 "debug": false,
 "exec": "ts-node ./index.ts",
 "ignore": [
  "mochawesome-report",
  "node_modules",
  "./test",
  "**/*.d.ts",
  "*.test.ts",
  "*.spec.ts",
  "fixtures/*",
  "test/**/*",
  "docs/*"
 ],
 "events": {
  "restart": ""
 },
 "watch": ["./app", "./configs", "./app.ts"],
 "ext": "ts tsx",
 "inspect": true
}

如果有使用到tsx文件,记得在tsconfig.json文件中将jsx取消注释,否则编译时可能会提示错误。

除了上述两种方法,今天无意中试了下直接使用nodemon来执行ts文件,发现控制台报错了,原谅我是个英语渣,不明白具体说了什么,但是看到了ts-node的身影,果断安装ts-node再试,竟然成功了。

nodemon ./index.ts

但是这样修改了ts文件不会热更新,可以在nodemon.json文件中将ext属性添加上ts就可以了。

{
 "restartable": "rs",
 "ignore": [".git", "node_modules/**", "client/*", "dist", ".cache", "logs"],
 "verbose": true,
 "execMap": {
  "": "node",
  "js": "node --harmony"
 },
 "events": {
  "start": "",
  "crash": "",
  "exit": "",
  "restart": ""
 },
 "ext": "js json ts tsx",
 "watch": ["./**"],
 "env": {
  "NODE_ENV": "development",
  "PORT": "3002"
 },
 "legacy-watch": false
}

当然除了上述方式,还可以使用构建工具来进行处理,如webpack,parcel等,当然如果大家有其他好的建议,欢迎交流。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript取得鼠标绝对位置程序代码介绍
Sep 16 Javascript
js setTimeout()函数介绍及应用以倒计时为例
Dec 12 Javascript
Javascript高级技巧分享
Feb 25 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
sails框架的学习指南
Dec 22 Javascript
AngularJS基础学习笔记之控制器
May 10 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
Dec 14 Javascript
微信小程序 实战实例开发流程详细介绍
Jan 05 Javascript
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
简单了解JavaScript中常见的反模式
Jun 21 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
Sep 26 Javascript
基于js判断浏览器是否支持webGL
Apr 18 Javascript
vue的三种图片引入方式代码实例
Nov 19 #Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
Nov 19 #Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 #Javascript
VUEX-action可以修改state吗
Nov 19 #Javascript
Vue.extend 编程式插入组件的实现
Nov 18 #Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 #Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
Nov 18 #jQuery
You might like
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
文件系统基本操作类
2006/11/23 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
python采集微信公众号文章
2018/12/20 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
出纳岗位职责
2013/11/09 职场文书
525心理活动总结
2014/07/04 职场文书
影视后期实训报告
2014/11/05 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
单位同意报考证明
2015/06/17 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL