我希望找到一种使用npm脚本同时运行tsc --watch && nodemon --watch
的方法。我可以单独运行这些命令,但是当我想同时运行它们时,只有第一个被执行。
"scripts": {
"runDeb": "set NODE_ENV=development&& tsc --watch && nodemon --watch"
}
tsc --watch
被执行了,但是nodemon
从来没有被调用,反过来亦然。
我希望找到一种使用npm脚本同时运行tsc --watch && nodemon --watch
的方法。我可以单独运行这些命令,但是当我想同时运行它们时,只有第一个被执行。
"scripts": {
"runDeb": "set NODE_ENV=development&& tsc --watch && nodemon --watch"
}
tsc --watch
被执行了,但是nodemon
从来没有被调用,反过来亦然。
我认为你想要的是类似于这样的东西(我的当前设置):
"scripts": {
"compile": "tsc && node app.js",
"dev": "./node_modules/nodemon/bin/nodemon.js -e ts --exec \"npm run compile\""
}
我创建了两个脚本"compile"和"dev"。要开始开发,只需运行npm run dev
,它会启动nodemon并让其监视.ts文件(使用-e
标志)。然后,每当一个.ts文件更改时,nodemon将exec
编译任务,基本上编译并运行node应用程序。
虽然同时使用是一个不错的选择,但我的设置保证在尝试执行结果为.js文件之前完成了tsc
的工作。
tsc -w
使用增量编译和缓存已解析的文件,因此编译速度应该更快。这就是为什么我喜欢同时运行tsc -w
和nodemon的原因。 - Andzej Maciusovicnodemon --watch src/ --exec \"npm run compile\" --verbose -e ts
。 - Benny Code"start": "nodemon -w src --exec 'npm run compile'"
nodemon
的路径不是必需的。-w src
),否则它会一直重建,因为目标(这里是 dist
)也被监视了。nodemon
添加到 devDependencies
中:
npm i -D nodemon
- Marc Wäckerlintsc --incremental
来提高速度?将其组合起来看起来是这样的:"dev": "nodemon -e ts --watch src --exec \"tsc --incremental && node app.js\"",
我已经使用AlterX的解决方案有一段时间了,它一直运行得非常完美,但我发现速度有点慢。因此,我现在使用tsc-watch。它使tsc使用增量编译类似于-w
标志,可以使应用程序重新启动得更快。
像这样在你的package.json中添加类似的代码即可:
"scripts": {
"start": "tsc-watch --onSuccess \"node .\""
}
--onSuccess "sh -c 'babel && uglifyjs'"
。 - Adam Mazzarellanode --inspect .
,并添加一个简单的任务来附加,那么vscode调试器可以附加到此处。另外,安装apt
上的notify-send
可能会很方便,并在--onFailure
事件上使用它来发送系统通知。 - MagicLegend"tsc-watch --onSuccess \"node dist/index.js\""
- Dominictsc-watch
存在很多问题,包括重启次数过多和无法正确终止正在运行的进程。因此,我不能推荐使用tsc-watch
。 - dimiguel尝试将以下内容添加到您的 package.json 文件中:
"scripts": {
"start": "concurrently --kill-others \"tsc -w\" \"nodemon dist/app.js\"",
}
同时将这些npm包(concurrently、nodemon、typescript)添加到你的package.json中:
"devDependencies": {
"concurrently": "^2.2.0",
"typescript": "^1.8.10",
"nodemon": "^1.9.2",
}
nodemon
在typescript完成工作前就开始了,一个可行的hack解决方案可能是给nodemon
设置延时,例如nodemon --delay x
,这将给tsc
留出一些时间。 - Nicolas Domingueztsc --watch
不是更高效吗? - Alex Bookertsc
已经完成。
实际上,这意味着您无法保证nodemon
正在运行的代码包括最新的更改,这也是首先观察更改的全部意义所在。
明确一点,如果您同时使用concurrently,那么两个任务将同时运行,这意味着您将同时运行tsc
和nodemon
,由于tsc
需要一些时间来编译,因此nodemon
可能不会选择最新的更改,因为它将在tsc
完成之前启动。 - AlterXtsc-watch
非常好用;在我的package.json
文件中的dev
脚本中:"tsc-watch --onSuccess \"nodemon\""
。 - Leo问题在于有两个文件的监视器。一个是tsc -w
,另一个是nodemon
。
当对.ts
文件进行更改时,tsc
会检测到并编译它,并在目标文件夹中创建.js
版本。
现在从Nodemon的角度来看,它检测到两个变化(至少)——一个是.ts
,一个是.js
。在第一次变化时,它会重新启动自己,但在第二次变化时,它不知道已经有另一个“启动”正在进行中,因此尝试再次重启,但失败了。对我来说,这是一个nodemon的bug,参见https://github.com/remy/nodemon/issues/763。
tsc-watch --onSuccess
tsc-watch具有--onSuccess
,您可以在其中放置node
。这样你就只有一个监听器。
您可以轻松延迟nodemon重新启动(请参见--delay)。这需要最少的设置更改。
我无法将其设置好,但这种方式nodemon
希望只检测到一个更改。这可能会在未来或当tsc生成多个文件时引起问题。
package.json
中添加了"start": "node_modules/.bin/tsc-watch --onSuccess 'node ./src/app.js'"
,现在可以通过npm start
很好地运行了 :) - Blingers我的解决方案是在2018年10月使用最新版本的nodemon。
第一步:
安装nodemon
(npm install nodemon --save-dev
)和ts-node
(npm install ts-node --save-dev
)
第二步:
创建nodemon.json
。我喜欢将我的nodemon配置文件保持在一个单独的nodemon.json文件中,以使npm脚本更容易阅读。因此,在项目根目录中创建nodemon.json
并添加以下内容:
{
"ignore": ["**/*.test.ts", "**/*.spec.ts", ".git", "node_modules"],
"watch": ["src"], // your .ts src folder
"exec": "npm start", // your npm script created in package.json
"ext": "ts"
}
然后创建您的npm start
脚本,例如像这样:"scripts": {
...
"start": "ts-node src/server.ts",
"dev:ts": "nodemon",
...
}
然后运行 npm run dev:ts
或者 yarn dev:ts
就可以运行并监视你的TypeScript服务器代码。
要获取其他配置,例如Jest
单元测试等,请参阅此文章。
nodemon.json
不在与 package.json
相同的目录中怎么办? - CodyBugsteinpackage.json
中使用 nodemonConfig
键来配置 nodemon
。这里有一个相关的工作流程:https://alligator.io/workflow/nodemon/ - billyjovTypeScript-Node-Starter
很快。
https://github.com/microsoft/TypeScript-Node-Starter/blob/master/package.json
"dev": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch-ts\" \"nodemon ./dist/app.js\"",
"watch-ts": "tsc -w"
concurrently -n
为npm run watch-ts
命名为TypeScript
,并通过使用concurrently -c
添加颜色yellow.bold
。这样我就可以很容易地识别每个进程的消息了。nodemon
监视.ts
文件package.json
中
"scripts": {
"start": "nodemon --exec ts-node-esm ./src/*.ts",
},
nodemon
之前,在你的concurrently
命令中使用sleep
。"scripts": {
"dev": "concurrently -k \"tsc -p ./src/server -w\" \"tsc -p ./src/client -w\" \"sleep 5 && nodemon ./dist/server/server.js\"",
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node ./dist/server/server.js"
},
npm run dev
时 nodemon 实际上启动了三次。但如果我在启动 nodemon 进程之前等待5秒钟,那么两个 tsc 进程都已经完成,然后继续监视。npm run dev
时延迟。之后,每个文件重新编译都会正确地重新启动 nodemon。ts-node
运行.ts
文件。只需全局安装它,nodemon
会自动使用ts-node
。简单来说;
让nodemon
监听tsc
的输出(即.js
文件)的变化。
你想要设置nodemon
监视tsc --watch
何时完成,正如其他评论中所暗示的那样,所以只需要求它监视tsc
的目标目录中.js
文件的更改。
例如,在package.json
中:
"scripts": {
...
"watch": "tsc --build src/tsconfig.json --watch",
"watch-tests": "nodemon --watch dist -e js --exec \"yarn run tests\"",
"tests": "some script to run my tests",
...
}
同时在 src/tsconfig.json
文件中:
{
...
"compilerOptions": {
"outDir": "../dist",
...
},
...
}
在哪里?
--watch <folder>
将指向您在 tsconfig.json 文件的 compilerOptions
->outDir
中定义的相同位置,-e js
仅会监视 JavaScript 文件的更改,并且--exec <some arbitrary thing to run>
让 nodemon 运行不止 node.js 脚本。如果您想让 nodemon 运行的东西是一个 node 脚本,它可以进一步简化为只有 nodemon --watch dist -e js my-node-script.js
注意:如果您发现
nodemon
启动其脚本太快,您可以通过--delay
增加检查更改的节流延迟