Open ajotaos opened 4 years ago
That's interesting, as I encountered the same issue (Ctrl-C). never thought that the cause is tsc-watch
.
But do you think that the SIGINT and SIGTERM is the same issue?
Can you organize a simple example repo to reproduce?
Thanks
Sure @gilamran
I really think tsc-watch
is the responsible for the Ctrl+C
. If you were to run tsc --watch
and exit with Ctrl+C
everything is fine but tsc-watch
gets hold up. I'm using tsc --watch
as reference since it mentions in the documentation that it's being used underneath.
You can test this separately with npm run watch:ts
(tsc-watch hangs) and npm run watch:tsc
(tsc --watch exits) or together with npm run watch:*
. No matter how you run it or if you add more tasks, watch:ts
is always the last one to log and remains exiting forever.
Not always do the SIGINT
and SIGTERM
handlers are called, it looks random but maybe there's something.
src/index.ts
console.log(`Script has started`);
const intervalId = setInterval(() => {
console.log('tick');
}, 1000);
process.on('SIGINT', () => {
clearInterval(intervalId);
console.log(`Script has ended`);
process.exit();
});
process.on('SIGTERM', () => {
clearInterval(intervalId);
console.log(`Script has ended`);
process.exit();
});
tsconfig.json
{
"compilerOptions": {
"incremental": true,
"target": "ES2020",
"module": "CommonJS",
"strict": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"rootDir": "./src",
"outDir": "./dist",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["./src/**/*"],
"exclude": ["./node_modules"]
}
package.json
{
"scripts": {
"start": "concurrently --kill-others yarn:watch:*",
"watch:ts": "tsc-watch --onSuccess \"node ./dist\" --noClear",
"watch:tsc": "tsc --watch"
},
"dependencies": {},
"devDependencies": {
"concurrently": "5.3.0",
"tsc-watch": "4.2.9",
"typescript": "4.0.5"
}
}
I have been continuing playing with it and sometimes even though I Ctrl+C
it, the process has not been killed.
Thanks! I'll look into it.
I did a test (using your example code) and the Ctrl-C did terminate the process (Using SIGINT). I'm using Mac. What's your OS?
I'm on Catalina 10..15.7 (the latest one), node 15.1.0, typescript 4.0.5 and tsc-watch 4.2.9.
When running watch:ts
it's more subtle, there are hints for example, after Ctrl+C
and the line prompt appearing on the terminal that if you push the up arrow button, instead of brining the previous like it will print ^[OA
which happens when there's a process running.
It's more noticeable on the start
script. In this case it happens the same as previously but the line prompt will not appear.
I'm using the exact same versions, and Ctrl-C just stops the process... I don't see what you're describing... What am I missing?
Does it work for you to video chat it on Zoom to check it out live?
how can we do a private chat?
On GitHub? I didn't know it has that feature.
I see that you're online... lets do zoom now
I'm in @gilamran
Ok, after the Zoom meeting, it appears this issue is occurring only with the Yarn package runner. NPM works fine.
I've pushed a branch test-kill
please try it.
It worked on the single script watch:ts
. The concurrently one start
still requires a second Ctrl+C
using yarn
, on npm
it works.
I'm experiencing this issue as well, is there a patch?
Took a peek based on @ajotaos's comment, haven't attempted any fixes:
Having similar issue when ctrl + c
with yarn
We've had to move away from tsc-watch
due to the number of loose process issues where exiting the process doesn't kill the running subprocess, so we have to manually kill the port after the fact. Also it sometimes just stops compiling at all.
I've very sorry to hear that, maybe you can provide an example to reproduce the issue?
We've had to move away from
tsc-watch
due to the number of loose process issues where exiting the process doesn't kill the running subprocess, so we have to manually kill the port after the fact. Also it sometimes just stops compiling at all.
same problem here. when vscode is on Auto Attach mode with auto save, or using a debug terminal, each change on the file open a new debug process but don't close the previous one when using the --onSuccess with "npm start" or "node ./outDir".
@Mujo I'm sorry but I don't understand your reproduction steps... can you give me clear instructions on how to reproduce this?
Looks like something in most of the projects we use here in work is holding the process. I tried to create a new project but couldn't reproduce yet. when i find it i will post here again.
I'm facing the same issue using Turborepo.
Hey all, tsx
does not have any of these issues. It also has a watch mode. https://github.com/privatenumber/tsx
Is anyone can provide a simple reproduction repo.?
Hi,
I can't provide a simple reproduction repo right now, but I think you can reproduce the problem by loading a couple queue system. I think they launch subprocess to run and I think they are not close properly on the reload.
The project I'm working use Pubsub and bullmq to handle messaging and task.
You could try to run a project that run a lot of bullmq worker (I guess more than 10 should do it).
Hey all,
tsx
does not have any of these issues. It also has a watch mode. https://github.com/privatenumber/tsx
Actually tsx
has this problem in watch mode tsx watch
(see https://github.com/privatenumber/tsx/issues/163).
After running
tsc-watch
, on its own, from the CLI and trying to stop it, I'm always requiring an additionalCtrl+C
.Also, when used alongside
concurrently
, theSIGINT
andSIGTERM
is not being passed to the code in theonSuccess
argument.How do I tell
tsc-watch
, when run from the CLI, it should end the process and not remain hanging?