如何在TypeScript文件更改时监视和重新加载ts节点
我正在尝试使用TypeScript和Angular应用程序运行一个dev服务器,而无需每次传输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
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脚本
Mypackage.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
为我做了这个把戏-这在环回中起了作用