我正在尝试用TypeScript和Angular应用程序运行一个开发服务器,而不是每次都转译ts文件。

我发现我可以用ts-node运行.ts文件,但我也想观看.ts文件并重新加载我的应用程序/服务器。这方面的一个例子是命令gulp watch。


当前回答

我已经抛弃了nodemon和ts-node,取而代之的是一个更好的选择,ts-node-dev https://github.com/whitecolor/ts-node-dev

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

(编辑) 自从我写了这个答案,nodemon已经改进了很多,现在所需的配置更轻了,性能也更好了。我目前使用这两种方法(显然是在不同的项目中),并且都很满意。

其他回答

把这个加到你的包里。json文件

scripts {
"dev": "nodemon --watch '**/*.ts' --exec 'ts-node' index.ts"
}

要做到这一点,你还需要安装ts-node作为dev-dependency

yarn add ts-node -D

运行yarn dev启动dev服务器

步骤1:你可以简单地安装nodemon和ts-node(如果你已经安装了,跳过)

npm install --save-dev nodemon ts-node

步骤2:你可以在package.json中配置启动脚本

"start": "nodemon ./src/app.ts"

现在nodemon自动从项目中识别typescript,自己使用ts-node命令。使用npm start,它会自动编译/监视和重载。

如果你得到任何错误,如typescript模块没有在项目中找到。在项目文件夹中简单使用此命令。

npm link typescript

修改后清除控制台日志

Javascript:

"start": "nodemon -x \"cls && node\" index.js",

打字稿:

"start": "nodemon -x \"cls && ts-node\" index.ts",

只需更新这3个包

nodemon, ts-node, typescript
yarn global add nodemon ts-node typescript

or

npm install -g nodemon ts-node typescript

现在你可以运行这个,问题解决了

nodemon <filename>.ts

从其他答案中总结选项

Nodemon + ts-node非常稳定,但需要显式配置,并且有点慢 Node-dev + ts-node需要的配置比nodemon少得多,但仍然很慢 Ts-node-dev速度很快,但不可靠

注意tsx(在底层使用ESBuild)和swc不做类型检查;这应该是可以接受的,因为大多数编辑器都内置了类型检查,并且类型检查仍然应该是构建过程的一部分。您还可以在测试的同时单独执行类型检查,或者通过tsc——noEmit作为预推送钩子。

(推荐)tsx

TL;DR:最小配置的最快速度

截至2023-02-01,tsx似乎是速度和最小配置的最佳组合:

安装tsx NPM install——save-dev TSX 更新您的包。json。 “脚本:{ "dev": "tsx watch src/index.ts", 运行它 运行开发 (如果您只想全局安装tsx并直接运行,请调整这些步骤)

方案1:nodemon/node-dev + ts-node + swc

TL;DR:与tsx一样快,但具有更多配置

将nodemon/node-dev的可靠性与ts-node-dev的速度相结合的另一种选择是使用ts-node和swc, swc是Rust中实现的与TypeScript兼容的转译器,比TypeScript转译器“快一个数量级”。

安装nodemon或node-dev(你喜欢哪个) nodemon NPM install——save-dev nodemon node-dev NPM install——save-dev node-dev 使用swc集成设置ts-node https://github.com/TypeStrong/ts-node#swc-1 安装必要的软件包 NPM install——save-dev ts-node @swc/core @swc/helpers regenerator-runtime 将此添加到tsconfig.json " ts-node ": { “swc”:真的 } 运行nodemon或node-dev,例如 Nodemon——查看SRC SRC /index.ts 或者: node-dev src / index.ts

方案2:nodemon/node-dev + ts-node transpileOnly

TL;DR:快速、可靠

这里有一个替代方案,它比前一个选项要慢,因为它使用了标准的TypeScript转译器,但在我的测试中,它仍然比nodemon/node-dev + ts-node快。

基本上,它与前面的选项相同,但没有swc。通过禁用类型检查,它比开箱即用的ts-node更快(关于为什么这应该是可接受的,请参阅上面的说明)。

如上所述安装nodemon/node-dev 安装ts-node NPM install——save-dev ts-node 修改您的tsconfig。为ts-node启用transpileOnly " ts-node ": { “transpileOnly”:真的 } 如上所述调用nodemon/node-dev

方案3:nodemon + tsc—增量

TL;DR:快速,可靠,类型检查,更挑剔

这几乎与前一种选择的速度相同。与其他选项相比,这个选项的唯一真正优势是它可以进行类型检查。

在缺点方面,它可能会更挑剔;在我的测试中,我使用dotenv来获取我的.env文件进行本地开发。但这取决于tsc构建在tsconfig中的配置方式。Json,你可能需要做一些杂耍才能让它工作。

但有选择是件好事,所以就是这样:

Install nodemon as above (It's possible that this may work with node-dev as well, but I didn't see an exec option for node-dev) Configure tsconfig.json to transpile your TypeScript to JavaScript In particular, noEmit should not be set to true Configure nodemon to run the TypeScript compiler to do an incremental transpilation any time a TypeScript file is changed, e.g. "dev": "nodemon -e ts --watch src .env --exec \"tsc --incremental && node src/index.js\"", You can even remove --incremental to further simplify it, but it will end up being much slower, comparable to nodemon/node-dev + ts-node.