Brief
Following setup freezes:
concurrently "vite" "tsx watch index.ts"
index.ts
console.log("hello world");
import "mysql2"
hello world does not log before app freezes.
Works:
# terminal 1:
vite
# terminal 2:
tsx watch index.ts
Or:
index.ts
console.log("hello world");
// import "mysql2"
Detailed Explanation
I was using concurrently with the mysql2 package, with tsx watch to run my code and watch for changes. At some point, it started freezing completely on startup. I even added a console.log at the very beginning of the entry point script that would not even print, which made me think it was an import issue (since I think imports run even before that console.log).
After disabling various parts of code, I finally disabled my import for mysql2 and it started running again. But, even if I did not use the value imported, just having the import "mysql2" by itself would cause it to freeze.
Finally, I tried running the two-part application without concurrently and just in separate terminals, and it worked fine, with the mysql2 import and everything.
I presume this is an issue with concurrently, mysql2, and tsx watch since it works fine if I remove any one of these three dependents (using tsx not in watch mode also works). I switched to npm-run-all and it works fine now. Not sure exactly what mysql2 is doing as a side-effect, or what breaks it when using concurrently.
Environment
OS: Windows 10 x64
Terminal: Powershell integrated in VSCode 1.96.2
Minimal Example
I've reproduced this issue with two files:
- The following minimal
package.json:
{
"name": "test",
"version": "0.0.1",
"scripts": {
"dev": "concurrently \"vite\" \"tsx watch index.ts\"",
"dev-nowatch": "concurrently \"vite\" \"tsx index.ts\"",
"dev-index": "tsx watch index.ts"
},
"dependencies": {
"mysql2": "^3.12.0"
},
"devDependencies": {
"concurrently": "^9.1.2",
"tsx": "^4.19.2",
"typescript": "~5.6.2",
"vite": "^6.0.5"
}
}
- The following file,
index.ts:
console.log("hello world");
import "mysql2";
With these files, run:
The following shows that hello world does not log as expected:
The following commands show that it does print when not using concurrently or when not using watch mode:
npm run dev-nowatch
npm run dev-index
Also try commenting out import "mysql2" to see that this also works:
console.log("hello world");
// import "mysql2"
Brief
Following setup freezes:
index.tshello worlddoes not log before app freezes.Works:
Or:
index.tsDetailed Explanation
I was using
concurrentlywith themysql2package, withtsx watchto run my code and watch for changes. At some point, it started freezing completely on startup. I even added aconsole.logat the very beginning of the entry point script that would not even print, which made me think it was an import issue (since I think imports run even before thatconsole.log).After disabling various parts of code, I finally disabled my import for
mysql2and it started running again. But, even if I did not use the value imported, just having theimport "mysql2"by itself would cause it to freeze.Finally, I tried running the two-part application without
concurrentlyand just in separate terminals, and it worked fine, with themysql2import and everything.I presume this is an issue with
concurrently,mysql2, andtsx watchsince it works fine if I remove any one of these three dependents (usingtsxnot inwatchmode also works). I switched tonpm-run-alland it works fine now. Not sure exactly whatmysql2is doing as a side-effect, or what breaks it when usingconcurrently.Environment
OS: Windows 10 x64
Terminal: Powershell integrated in VSCode 1.96.2
Minimal Example
I've reproduced this issue with two files:
package.json:index.ts:With these files, run:
The following shows that
hello worlddoes not log as expected:The following commands show that it does print when not using
concurrentlyor when not usingwatchmode:Also try commenting out
import "mysql2"to see that this also works: