如何在TypeScript文件更改时监视和重新加载ts节点

如何在TypeScript文件更改时监视和重新加载ts节点,typescript,angular,gulp,development-environment,nodemon,Typescript,Angular,Gulp,Development Environment,Nodemon,我正在尝试使用TypeScript和Angular应用程序运行一个dev服务器,而无需每次传输ts文件。我发现我可以使用ts节点运行,但我还想观看.ts文件,并像使用gulp watch那样重新加载应用程序/服务器 编辑:更新为最新版本的nodemon 在我的开发环境中,我一直在努力解决同样的问题,直到我注意到,nodemon的API允许我们更改其默认行为,以便执行自定义命令 例如,对于最新版本的nodemon: nodemon --watch 'src/**/*.ts' --ignore 's

我正在尝试使用TypeScript和Angular应用程序运行一个dev服务器,而无需每次传输ts文件。我发现我可以使用
ts节点运行
,但我还想观看
.ts
文件,并像使用gulp watch那样重新加载应用程序/服务器

编辑:更新为最新版本的nodemon

在我的开发环境中,我一直在努力解决同样的问题,直到我注意到,
nodemon
的API允许我们更改其默认行为,以便执行自定义命令

例如,对于最新版本的
nodemon

nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts
  "scripts": {
    "watch": "nodemon -e ts -w ./src -x npm run watch:serve",
    "watch:serve": "ts-node --inspect src/index.ts"
  },
nodemon--watch“src/**”--ext“ts,json”--忽略“src/***.spec.ts”--exec“ts node src/index.ts”
或者创建一个包含以下内容的
nodemon.json
文件:

{
“手表”:[“src”],
“ext”:“ts,json”,
“忽略”:[“src/***.spec.ts”],
“exec”:“ts node./src/index.ts”//或“npx ts node src/index.ts”
}
然后在没有参数的情况下运行
nodemon

通过这样做,您将能够实时重新加载
ts节点
进程,而不必担心底层实现

干杯


对于较旧版本的
nodemon

nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts
  "scripts": {
    "watch": "nodemon -e ts -w ./src -x npm run watch:serve",
    "watch:serve": "ts-node --inspect src/index.ts"
  },
或者更好:将nodemon的配置外部化为一个包含以下内容的
nodemon.json
文件,然后运行
nodemon
,正如Sandokan建议的那样:

{ "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./index.ts" }

专门针对这个问题,我创建了
tsc watch
库。你可以在电视上找到它

显而易见的用例是:


tsc watch server.ts--outDir./dist--onSuccess“node./dist/server.js”

这里有一个替代HeberLZ的方法,使用npm脚本

My
package.json

nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts
  "scripts": {
    "watch": "nodemon -e ts -w ./src -x npm run watch:serve",
    "watch:serve": "ts-node --inspect src/index.ts"
  },
  • -e
    标志设置要查找的扩展名
  • -w
    设置监视的目录
  • -x
    执行脚本

--inspect
watch:serve
脚本实际上是一个node.js标志,它只是启用调试协议。

我已经转储了
nodemon
ts node
以支持更好的替代方案,
ts node dev

只需运行
ts node dev src/index.ts

添加
“watch”:“nodemon--exec ts node--./src/index.ts”
包.json的
脚本部分即可

当所需的任何文件发生更改时(作为标准节点开发人员),它将重新启动目标节点进程,但在重新启动之间共享Typescript编译进程

安装

yarn add ts-node-dev --dev
您的package.json可能是这样的

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "tsc": "tsc",
  "dev": "ts-node-dev --respawn --transpileOnly ./src/index.ts",
  "prod": "tsc && node ./build/index.js"
}
我和你一起去的

"start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec ts-node src/index.ts"
然后纱线开始。。ts节点不像“ts节点”

这对我来说很有用:

nodemon src/index.ts

显然是由于这个拉取请求:

将其添加到package.json文件中

scripts {
"dev": "nodemon --watch '**/*.ts' --exec 'ts-node' index.ts"
}
为了实现这一点,您还需要将ts节点作为开发人员依赖项安装

纱线添加ts节点-D

运行
warn dev
启动dev服务器我不希望使用ts节点,而是始终从dist文件夹运行。

为此,只需使用默认配置设置package.json:

....
"main": "dist/server.js",
  "scripts": {
    "build": "tsc",
    "prestart": "npm run build",
    "start": "node .",
    "dev": "nodemon"
  },
....
然后添加nodemon.jsonconfig文件:

{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "npm restart"
}
在这里,我使用了“exec”:“npm restart”
所以所有ts文件都将重新编译为js文件,然后重新启动服务器

要在开发环境中运行

npm run dev

使用此设置,我将始终从分布式文件运行,无需使用ts节点。

另一种方法可以是首先使用
tsc-w
在监视模式下编译代码,然后通过javascript使用nodemon。此方法在速度上与ts节点开发类似,并且具有更类似于生产的优点

“脚本”:{
“手表”:“tsc-w”,
“dev”:“nodemon dist/index.js”
},

如果您在使用
时遇到问题,请在
package.json
(中描述)中的“模块”
,使用以下配置:

{
“手表”:[“src”],
“ext”:“ts,json”,
“忽略”:[“src/***.spec.ts”],
“exec”:“node--loader ts node/esm--experimental specifier resolution./src/index.ts”
}
或者在命令行中

nodemon--watch“src/**”-ext“ts,json”--忽略“src/***.spec.ts”--exec“节点--loader ts node/esm--实验说明符解析src/index.ts”

如果
index.ts
是一个express实例,我如何杀死它并重新启动您还可以创建一个nodemon.json文件,其中包含所有提到的选项,如下所示:
{“watch”:[“src/***/.ts”],“ignore”:[“src/***.spec.ts”],“exec”:“ts node./app server.ts”}
只需键入
nodemon
我犯了一个错误,在文件夹名称之前添加了
/
,文件夹就坏了。这对我很有用:
{“verbose”:true,“watch”:[“server/***.ts”],“ext”:“ts js json”,“ignore”:[“server/***.spec.ts”],“exec”:“ts node index.ts”}
。命令行:
nodemon--watch server/***.ts--ignore server/***.spec.ts--verbose--exec ts node index.ts
。我的配置文件如下所示:
{“watch”:[“src/***/*.ts”],“ignore”:[“src/***/*.spec.ts”],“ext”:“ts js json”,“_exec”:“node dist/startup.js”,“exec”:“ts node src/startup.ts”}
在Windows机器上,不要在package.json中使用单引号。用
\“
替换它们可以使脚本正常运行:
“nodemon--watch\”/src/***.ts\”-r dotenv/config--exec\“ts node\”src/index.ts“
还要确保在本地为项目安装了typescript。否则,您可能会得到的错误不是很清楚。我认为现在应该是
ts节点--inspect--src/index.ts
,原因是。这种方法似乎产生了相当多的多余输出。
-ets-w./src
为我做了这个把戏-这在环回中起了作用