其实我觉得这个的矛盾根源就在于:虽然 windows 是最常用的操作系统,但是程序员写的东西却很少跑在 windows 上。
如果说你想开发一个东西开发的舒服,那最好你的开发环境和部署环境类似,比如你写的东西最后是要跑在 linux 服务器上的,那么你的开发环境也是 linux,这就会比较舒服,如果你写的是跨平台的还好,比如 js,跑在浏览器里,java 编译成 bytecode 跑在 jvm 上,这相当于你在开发能跨平台的东西,但是假如不跨平台呢?那就只能现在 windows 上编译,跑,运行好了,然后再在目标机上把源码pull下来,重新编译,但是你用编译型语言,你确定你在 windows 上编译的ok,到 linux 上就 ok 吗?这里面又是很多坑和复杂的兼容性问题。
其实很多平台说的跨平台,其实也无非是在系统api上又封装了个兼容层而已,你有时也无法特别断定不同操作系统平台上的 nodejs 会对相同的源码做出相同的行为,比如 spawnsync 这类 api,linux 下你知道是创建一个子进程,再在原进程和子进程之间建立 pipe 通信,但在 windows 下你可能并不确定它到底发生了什么,而且似乎常用的任务管理器啥的也看不到进程的详细信息,而 cmd 提供的 utilities 也不全不好用,所以一来二去,就会遇到很多难受的事情。
其实对于软件程序员,有个 chromium 内核的浏览器,有个 vscode,就妥妥够了,开发工具本来就应该和开发环境解耦,所以我推荐 WSL2 & 远程 linux 主机 + VSCode Remote 套装。