如何同时执行 typescript watch 和 running server?

问题描述 投票:0回答:7

我正在用 nodejs 开发我的项目。我发现如果我需要编码和测试 api,我会运行两个控制台,一个是执行 typescript watch,另一个是执行服务器。

我觉得好麻烦。我发现 github 上的其他开发人员已经在

package.json
中编写了脚本。很容易调用任何命令。它吸引了如何编写脚本和简化我的开发工作流程。

简而言之,typescript watch的命令是

tsc -w
,运行服务器的命令是
node app.js
。我的想法是将命令合并为
tsc -w & node app.js
,但我不能同时使用这两个命令。我该怎么做?谢谢。

node.js typescript npm command package.json
7个回答
15
投票

选项一

第一步

安装

concurrently
,使用
npm
pnpm
yarn

pnpm i concurrently -D   

第二步

使用此命令创建脚本

"scripts": {
    "run": "tsc && concurrently \"tsc -w\" \"nodemon dist/app.js\"",
}

选项2

无需安装任何东西(mac 或 Linux)

"scripts": {
    "run": "tsc -w & nodemon dist/app.js",
}

首先运行 tsc 以便您的目录在运行 node 时有一些东西

有了它,您将运行您的 Typescript 应用程序 🚀


14
投票

我的想法是将命令合并为 tsc -w & node app.js 但我不能同时使用这两个命令。我该怎么做

你有几个选择。最简单的是使用

ts-node-dev
https://github.com/whitecolor/ts-node-dev


8
投票

另一个选择是使用 nodemon:

tsc -w & nodemon app.js

自 Typescript 3.4 以来,编译速度更快,因为您可以使用

incremental
编译器选项,并且它们不断改进(包括 3.8 中大型项目的有趣更改)。

更新:

我也开始同时使用HerberthObregon在他的回答中说


6
投票

TLDR,如果你喜欢 nodemon,这是获取文件监视、编译和执行的直接方法:

nodemon --ext ts --exec 'tsc && node dist/index.js'

可选择将 tsc 替换为 babel 以加快编译速度。

这里有一个更完整的示例,在 package.json(带有源映射)中:

"scripts": {
  "develop": "nodemon --ext ts --exec 'yarn build --incremental && yarn serve'",
  "build": "tsc",
  "serve": "node --require source-map-support/register dist/index.js",
  ...
},

如果需要,安装source-map-support作为依赖项,咳咳……源地图支持!否则,从上面的

--require source-map-support/register
脚本中删除
serve

tsconfig.json

{
  "compilerOptions": {
    ...
    "sourceMap": true,
    "outDir": "dist",
  }
}

2
投票

基于 herberthObregon 的回答

第一步:安装包

npm install concurrently typescript nodemon --save-dev

第 2 步:在 package.json 中创建这些脚本

"scripts": {
   "build": "tsc",
   "build:watch": "tsc -w",
   "dev": "npm run build && concurrently \"npm run build:watch\" \"npm run serve:watch\"",
   "serve": "node dist/index.js",
   "serve:watch": "nodemon dist/index.js"
},
  • build 运行标准的打字稿构建
  • build:watch 在 watch 模式下运行 typescript build
  • serve 为您的节点项目提供服务(假设您的 tsconfig 输出到 dest/index/js)
  • serve:watch 每当 js 输出改变时,使用 nodemon 重启节点服务器
  • dev 将它们放在一起

1
投票

只是想把我的帽子扔在这里,这是一个使用

ts-node-dev
concurrently
的解决方案,类似于@HerberthObregon提供的解决方案,但使用
ts-node-dev
而不是
nodemon

"scripts": {
    "start": "npm run build && concurrently \"npm run build:watch\" \"npm run dev\"",
    "dev": "tsnd --respawn src/main.ts",
    "build": "tsc -p tsconfig.release.json",
    "build:watch": "tsc -w -p tsconfig.release.json"
}

奖励:如果您需要帮助来弄清楚

tsc
和您的
tsconfig.json
,我使用这个node typescript starter的合理默认值。


0
投票

这是一个适合我的解决方案

1。安装 ts-node 和 nodemon 作为开发依赖

2。创建脚本

"dev" : "nodemon app.ts"

© www.soinside.com 2019 - 2024. All rights reserved.