我正在尝试使用TypeScript和Angular应用程序运行开发服务器,而不是每次都转换ts文件。我发现我可以使用ts-node
进行运行,但我还想观看.ts
个文件并重新加载应用程序/服务器,就像我使用gulp watch一样。
答案 0 :(得分:226)
我一直在为我的开发环境做同样的事情,直到我注意到nodemon的api允许我们改变它的默认行为才能执行自定义命令。这方面的一个例子如下:
nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts
甚至更好地将nodemon的配置外部化为Sandokan,使用以下内容提取到nodemon.json文件,然后运行nodemon:
{ "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./index.ts" }
通过这样做,您可以实时重新加载ts节点进程,而无需担心底层实现。
干杯!
针对最新版本的nodemon进行了更新:
使用以下内容创建nodemon.json
文件。
{
"watch": ["src"],
"ext": "ts",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node ./src/index.ts"
}
答案 1 :(得分:39)
这里是使用npm脚本替代HeberLZ的answer。
我的package.json
:
"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标志,它只启用调试协议。
答案 2 :(得分:34)
我已将nodemon
和ts-node
倾向于支持更好的替代方案,ts-node-dev
https://github.com/whitecolor/ts-node-dev
只需运行ts-node-dev src/index.ts
答案 3 :(得分:8)
特别针对此问题,我创建了tsc-watch
库。你可以在npm找到它。
明显的用例是:
tsc-watch server.ts --outDir ./dist --onSuccess "node ./dist/server.js"
答案 4 :(得分:7)
将"watch": "nodemon --exec ts-node -- ./src/index.ts"
添加到scripts
的{{1}}部分。
答案 5 :(得分:5)
我做到了
"start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec ts-node src/index.ts"
和纱线开始.. ts-node不像'ts-node'
答案 6 :(得分:3)
答案 7 :(得分:3)
我宁愿不使用ts-node并始终从dist文件夹运行。
为此,只需使用默认配置设置package.json:
....
"main": "dist/server.js",
"scripts": {
"build": "tsc",
"prestart": "npm run build",
"start": "node .",
"dev": "nodemon"
},
....
,然后添加 nodemon.json 配置文件:
{
"watch": ["src"],
"ext": "ts",
"ignore": ["src/**/*.spec.ts"],
"exec": "npm restart"
}
在这里,我使用“ exec”:“ npm restart”
,因此所有ts文件都将重新编译为js文件,然后重新启动服务器。
要在开发环境中运行,
npm run dev
使用此设置,我将始终从分布式文件运行,而无需使用ts-node。
答案 8 :(得分:2)
将此添加到您的package.json文件
scripts {
"dev": "nodemon --watch '**/*.ts' --exec 'ts-node' index.ts"
}
要执行此操作,还需要将ts-node安装为dev-dependency
yarn add ts-node -D
运行yarn dev
以启动开发服务器
答案 9 :(得分:1)
您可以使用ts-node-dev
当任何必需文件发生更改时(作为标准node-dev),它将重新启动目标节点进程,但在两次重新启动之间共享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"
}
答案 10 :(得分:0)
我使用tsmon
https://www.npmjs.com/package/tsmon与Typescript进行了深度集成,并提供了增量转译和重新加载功能。
我一直在使用ts-node-dev
,直到有一天我发现它无法检测到界面上的更改。
安装
npm install tsmon
转到您的打字稿项目文件夹
tsmon [you .ts file]
答案 11 :(得分:0)
另一种方法可能是先在监视模式下使用tsc -w
编译代码,然后在javascript上使用nodemon。这种方法的速度与ts-node-dev相似,并且具有类似于生产的优势。
"scripts": {
"watch": "tsc -w",
"dev": "nodemon dist/index.js"
},
答案 12 :(得分:0)
如果您在 "type": "module"
中使用 package.json
(在 https://github.com/TypeStrong/ts-node/issues/1007 中描述)时遇到问题,请使用以下配置:
{
"watch": ["src"],
"ext": "ts,json",
"ignore": ["src/**/*.spec.ts"],
"exec": "node --loader ts-node/esm --experimental-specifier-resolution ./src/index.ts"
}
或在命令行中
nodemon --watch "src/**" --ext "ts,json" --ignore "src/**/*.spec.ts" --exec "node --loader ts-node/esm --experimental-specifier-resolution src/index.ts"
答案 13 :(得分:0)
第 1 步:您可以简单地安装 nodemon
和 ts-node
(如果已完成请跳过)
npm install --save-dev nodemon ts-node
第 2 步:您可以在 package.json 中配置启动脚本
"start": "nodemon ./src/app.ts"
现在 nodemon 现在会自动识别项目中的打字稿并自行使用 ts-node
命令。使用 npm start
,它会自动编译/监视和重新加载。
如果您遇到任何错误,例如在项目中找不到 typescript 模块。简单地在项目文件夹中使用这个命令。
npm link typescript