TypeScript文件更改时如何查看和重新加载ts节点

时间:2016-06-22 22:50:37

标签: typescript angular gulp development-environment nodemon

我正在尝试使用TypeScript和Angular应用程序运行开发服务器,而不是每次都转换ts文件。我发现我可以使用ts-node进行运行,但我还想观看.ts个文件并重新加载应用程序/服务器,就像我使用gulp watch一样。

14 个答案:

答案 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)

我已将nodemonts-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)

这对我有用:

nodemon src/index.ts

显然是由于以下请求:https://github.com/remy/nodemon/pull/1552

答案 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 步:您可以简单地安装 nodemonts-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
相关问题