我是一个 Web 程序员,Go 、Ruby 、Node 、前端。一切与 Web 相关的我都做(除了 PHP 哈哈)。
同时我也是一个 Windows 的喜爱者。可问题是我用 Windows 的事件越来越少——因为我无法在 Windows 上愉快的使用本地环境进行愉快的编程。
像我刚刚所列出来的几项语言,对 Windows 都很不友好,大家都优先选择支持 Linux 和 Mac——甚至是 M1 的 arm 环境。
所以有用 Windows 写代码兄弟吗,能介绍一下在大家都首选支持 Mac 和 Linux 的情况下,你平时如何解决这些环境问题的吗?
1
rekulas 2022-05-16 22:11:53 +08:00
作为成年人,我们一般都要,开虚拟机映射本地 win 开发 linux 运行
|
2
wilhelmvonchen 2022-05-16 22:12:53 +08:00 4
wsl2
|
3
i3x 2022-05-16 22:13:40 +08:00 via Android
???不要搞混运行环境和编程环境。
开发环境包含了调试机器和编程机器。远程开发并没有什么问题。在 windows 运行这些东西当然很麻烦。 我在 windows 编辑。在目标机器调试。为什么要在自己的编程电脑开发调试呢。 我从来不在本地运行调试代码。除非是临时搞个 win 的小工具。 哪怕 php 也不会放在 windows 。何况 go python 之类的。这些东西引入了一些依赖到时候清理维护多麻烦,而虚拟环境也不是万能的。直接远程虚拟机或者本地开虚拟机,环境如果需要侵入式修改,有问题直接快照回退一秒就 ok 。虚拟机快照为开机状态,一秒就进入状态,多方便。 |
4
Makabaka01 OP @rekulas 我用过一段时间 Docker ,别的体验还可以,但 Node 项目很不好弄,因为 node_modules 依赖和工程文件在一起。。。跨系统下载、写入大量小文件,整的 Node 项目的依赖都下不下来
|
5
cmdOptionKana 2022-05-16 22:15:47 +08:00
- Ruby 只是小坑吧?
- Hexo 的问题不能算 Windows 的问题,一大堆 Node 项目在 Windows 里没问题。 - CGo 只要下载 TDM-GCC ,双击安装,一路点下一步确定即可,也不算麻烦(相当于安装一个软件而已)。 还有什么问题? |
7
Makabaka01 OP @i3x 请教下,有什么和虚拟机同步工程代码的工具推荐吗,Jet Brains 那个 SFTP 同步总是出问题,老少同步东西
|
8
Buges 2022-05-16 22:20:32 +08:00 via Android
@cmdOptionKana 看看这个项目的下载量 https://www.npmjs.com/package/cross-env
|
9
Makabaka01 OP @cmdOptionKana Ruby China 的公告里都说的新手不要用 Windows hhhhh
|
10
jsq2627 2022-05-16 22:22:38 +08:00
WSL2 ,现在是我主力开发环境。跑公司复杂的 node / ruby / go / rust / python 等项目基本没啥问题。
|
11
Makabaka01 OP @cmdOptionKana 主要是没碰到就是小概率,碰到了就是大坑。。。Windows 碰到大坑的概率就比其他俩系统高太多。。。
|
12
i3x 2022-05-16 22:27:42 +08:00 via Android
@rekulas +1
既然最重要为线上服务所以肯定是直接高仿线上环境。wsl 跟线上差远了。 @willx12123 实在不行就共享文件夹。windows 挂载 linux 除了 samba nfs 客户端,甚至还可以 sshfs 。性能都不赖的。当我需要批量替换变量名称的时候,比本地固态硬盘还能快一些。 |
13
duzhor 2022-05-16 22:31:11 +08:00
除开开发环境,生活娱乐方面 windows 已经很方便并且大家都习惯了,考虑虚拟机、云服务器作为单独的开发环境,远程或者 ssh 连接
|
14
cmdOptionKana 2022-05-16 22:33:40 +08:00
@willx12123 这篇文章 https://ruby-china.org/topics/1020
列出的理由有 6 个大点,好几十个小点,其中只有一个小点 “每年解决 Windows 上的奇怪问题” 是说 Windows 的问题(就这么一句笼统在话,没有具体细节),其余全部都是类以使用习惯之类的。 @Buges 这个项目只是解决使用习惯的问题,错不在 Windows 系统吧? |
15
zhuangzhuang1988 2022-05-16 22:34:06 +08:00
那就选择 windows 友好的语言比如 c# java php 啥的。
|
16
treblex 2022-05-16 22:36:05 +08:00
vs code: remote wsl, remote server, remote docker
|
17
ychost 2022-05-16 22:40:04 +08:00 1
试试 C# 吧,配合 VS 直接起飞🛫
|
18
Buges 2022-05-16 22:45:31 +08:00 via Android
@cmdOptionKana 这个项目只是 Windows 上踩坑的一种体现。你要说错也没什么错的,哪个程序不支持 Windows 或在 Windows 上有 bug 也不能怪 Windows 啊。
|
19
walpurgis 2022-05-16 22:56:19 +08:00
win 本地环境不值得折腾,否则微软也不会花那么多代价去搞 wsl
现在发展方向就是远程开发,让在远程开发像编辑本地项目一样,vscode remote 已经非常完美了,JB 家的还在 Beta ,能用,但 bug 还很多,需要经常重启,估计再过个半年一年就能成熟稳定了 |
20
FrankHB 2022-05-16 22:57:29 +08:00 1
可以默认用 WSL 。
嫌弃虚拟机麻烦(比如 IP 地址莫名其妙啦……),就 WSL1 ( WSL2 本质就是个 HyperV 虚拟机实例),虽然有些限制,大多数还算能用。 例外情形: 若你需要开发 Linux 内核模块本机调试之类,那当然没办法; 用 fuse 之类也可能比较麻烦; 偶尔会有些系统调用实现残缺不可用; 不要指望 systemd 之类的东西完整可用(同等层次上依赖系统实现细节的还有 nix 等); GUI 多少比原生 Win32 麻烦且可能有无解的细节问题(例如输入法之类),性能可能也不咋地( WSLg 需要 Win11+WSL2 ),但 VcXsrv 跑个别应用基本上够用; 其它情况下,和原生 Linux 的差异是否能被容忍,取决于你自身对环境的理解(觉得不保险嫌弃麻烦那还是虚拟机了)。 如果要更原生的体验,用 MSYS2+MinGW 。 警告(相对 WSL ):原生 Win32 的构建性能会普遍降低; 小文件 I/O 性能会极其感人; 即便排除 I/O 问题,也不要指望 node.js 之类的运行时的表现不会明显变差; 同时,可能处理一些表面上容易遗漏,实际 Win32 特有的屑问题,大多是关于文件系统的: Win32 的默认机制导致打开程序不能删除,这有时候很欠揍; 默认创建符号链接可能需要管理员权限,需要组策略变通; Win32 不支持无视 AUX 这样的 DOS 保留文件名(但 MSYS 的工具能提供一些变通); 可能必须需要 fsutil 单独设置大小写兼容。 如果你要继续完全原生地使用 Win32 ,那么基本不会有更好的体验(以上 WSL 解决了的 Win32 问题会继续存在),并且有些问题是无解的。 @cmdOptionKana 这篇文章有些是很扯蛋的,或者至少是过时了(即便考虑原文时间无视 WSL )。 像工具方面: 很多都是 Win32 自己残废,而不是命令行; Win32 的残废如果不是需要自己积极变通,是可以改用现有工具在 Windows 上的移植而无视的; 如 git 的不好用,大多是因为 git 自身而不是 Windows 上的实现(除了一些 I/O 性能问题)。 在如,第五点几乎全是在 FUD ,不知道是在黑 Windows 还是黑 Linux 。 |
21
FrankHB 2022-05-16 23:09:07 +08:00
@walpurgis WSL 不是这个原因而产生的,它的前身是意图在 Windows 上原生运行 Android app ,但因为种种原因黄了(很久之后 Win11 上 WOA 才被支持)。
反过来,用你的逻辑,也说不通为什么微软仍然花更大的力气支持 VS (不是 VSC )这种根本就是 Windows-only 的开发环境——注意是持续投入资源推动大量的功能性更新,而不仅仅是维持可用。 |
22
lance6716 2022-05-16 23:16:49 +08:00 via Android 1
wsl IO 性能太差,大项目根本没法忍
|
23
2NUT 2022-05-16 23:17:56 +08:00
remote ssh
|
24
ila 2022-05-16 23:23:26 +08:00 via Android
wsl 的比 wsl2 简单些。
本地写完了,还是要上 dev 机器。 |
25
EIJAM 2022-05-16 23:31:12 +08:00 via iPhone
黄鱼处理掉吧,或者装个 Linux 桌面发行版。等你折腾久了就发现还是换个系统比较简单。
|
27
agagega 2022-05-16 23:32:54 +08:00
IDEA 系对 WSL 的支持还行。RubyMine 支持通过 WSL 访问 rbenv ,run 命令啥的还有各种问题,毕竟 WSL 再怎么也没有 macOS/Linux 那么无缝,只能说将就用吧。
|
28
jsq2627 2022-05-16 23:45:30 +08:00
@HubOwO 我指的是 WSL2 ,把他当 vm 看待就好了,所有文件操作不要跨 vm 进行,仓库不要克隆在 /mnt 下面,性能杠杠的。还有很重要的一点,我在搭配 vscode remote extension 使用,因此基本不会产生跨系统文件 IO
|
29
Makabaka01 OP @walpurgis Bug 巨多,目前 JB 家我感觉比较好用的还是 Projector ,就是有点卡
|
30
dayeye2006199 2022-05-17 01:12:40 +08:00
WSL+IDE SSH 远程插件。
对环境有洁癖的就 vagrant 走 hyper-v 虚拟机,然后远程插件。 觉得这还不行的,那就买台台式机装 linux ,然后远程插件。 或者你可以用远端的 vscode ,例如 github codespace ,gitpod ,coder 这种环境。 |
31
dcsuibian 2022-05-17 01:19:58 +08:00
要底层 C 的,那跨平台性应该不太好弄。还是老老实实装个虚拟机或换台 mac 吧。
测试了下,windows 下最新版 hexo 安装启动都没啥问题。 nodejs 大部分的库应该都是跨平台的,只有很少部分不是:目前只记得有 node-sass 和 opencv ,因为下面是 C/C++。前者现在被跨平台的 dart-sass 淘汰了。 前端应该不用担心这个问题,毕竟用 windows 的开发者也很多。(甚至有可能是大多数) |
32
ginakira 2022-05-17 01:20:33 +08:00
VirtualBox 开分离模式,关掉界面的窗口后台运行,Visual Studio Code Remote 写代码,Tabby 做终端模拟器 SSH 过去
|
33
shuimugan 2022-05-17 01:50:18 +08:00
可以用华硕的 ramdisk https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/ASUS_RAMDisk_V2.03.00_for_Windows_10_64-bit.zip
把内存分出来当硬盘,结合 WSL1 ,可以解决 IO 问题,它还会回写数据到硬盘,只要提交及时,就算蓝屏了,用 jetbrains 开发的话可以在 local history 找回来。 我笔记本分了 8G 内存跑代码,台式机分了 40G 内存放游戏,非常愉悦。 |
34
ColinChang 2022-05-17 02:05:43 +08:00
很多最新的插件用 windows 简直了。。。
最近碰到的:1. java-grpc 的 maven 插件,windows 版一直过不去 maven 检查 2. go-grpc 如楼主所说 3. go-ent&entimport 无法读取数据库 |
36
to2false 2022-05-17 08:36:19 +08:00
vscode remote ssh+虚拟机 /wsl2
|
37
yEhwG10ZJa83067x 2022-05-17 08:41:52 +08:00
我用的是 vagrant + virturlbox + debian + docker
IDE 和代码还是放在 win 环境下,用共享文件来操作 io 。 配置好后打包个 box ,在任何电脑安装开发环境很快的。 |
38
demoshengxw 2022-05-17 08:47:54 +08:00 via iPhone
我是 go 和 php 都搞,docker 自己写好编排文件。基本不区分平台,很方便
|
39
shabbyin 2022-05-17 08:52:11 +08:00
我是把 wsl2 当另一个操作系统来用了
独立的 ssh key 独立的 workspace 所有工作代码全部在 wsl2 路径中 目前没遇到什么太奇怪的问题 经常会出现 webstorm 报 git error code |
40
taest 2022-05-17 08:59:21 +08:00
还好,我是 java
|
41
zjsxwc 2022-05-17 09:01:01 +08:00
windows 只有 C#与 TypeScript 是最合适的。
php 对 windows 支持很差的。 |
42
gam2046 2022-05-17 09:04:23 +08:00
我自己做过 Go 与 node 这一块,vs code remote ssh 是非常好的选择,既获得了较好的 UI 体验,也获得工具链的便利性。
|
43
codefun666 2022-05-17 09:04:53 +08:00
为啥要用 Windows 编程?
|
44
ikaros 2022-05-17 09:09:09 +08:00
我绝大部分时间用 windows 开发, cgo 装个 tdm-gcc 就行了,另外几个老是出问题,就 tdm-gcc 这个用下来基本没啥问题
|
45
theprimone 2022-05-17 09:10:54 +08:00
我也 WSL2 ,虽然我基本只用 node
|
46
adoal 2022-05-17 09:11:46 +08:00
用 Windows 要愉快编程……老老实实选微软御用技术栈呗。
|
47
eudore 2022-05-17 09:16:23 +08:00
虚拟机和云服务器调试 go ,win vsc 调试 flutter ,部署就云服务器 docker 润。
|
48
lizhenda 2022-05-17 09:19:34 +08:00
不要纠结,能用就行
|
49
yinzhili 2022-05-17 09:22:10 +08:00
Java 虚拟机不能跨平台吗?.NET 运行时不能跨平台吗? PHP 不能跨平台吗?
有什么可矫情的。 |
50
Cloutain 2022-05-17 09:23:05 +08:00
做了几年的 Windows 上下层开发,搞不懂用 Windows 开发哪里不愉快了
|
51
changnet 2022-05-17 09:52:25 +08:00
@willx12123 为啥要同步工程代码?我都是直接把 win 下的目录共享到 VirtualBox ( VMware 也有类似的功能)里的虚拟机,在里面可以直接用这个目录
一般都不会有问题。极少数情况不兼容,比如解压 tar.gz 的包里要创建软链接,或者 coredump 无法在这个目录创建,但很少遇到或者或者绕过 |
52
shenqi 2022-05-17 10:09:27 +08:00
以前用 win 的年代的时候使用 vagrant 。
用 mac 之后,就不管了。 |
53
liuyibao 2022-05-17 10:11:35 +08:00 1
用 Ubuntu 做日常开发电脑的系统是一种怎样的体验? - 知乎
https://www.zhihu.com/question/30816866/answer/427750976 我以前用 ubuntu 做开发机,然后在 ubuntu 上装了虚拟机跑 windows 用于运行微信。但是最后我发现,还是知乎这位大哥比较牛,用的 hyper-v ,XForwarding 把窗口投射到 windows 窗口,具体搜下 vcXsvr 这个软件,我认为这个是目前最完美的开发环境。 不要直接用 wsl2 ,而只把它当做一个命令号工具,linux 系统装在虚拟机 hyper-v 里。 |
54
richardwong 2022-05-17 10:17:52 +08:00
买一台 mac
节省下来折腾的时间刷刷数据结构或算法 或者打开 win 来一把游戏 你的心情会愉悦很多 |
55
wonderfulcxm 2022-05-17 10:22:01 +08:00 via iPhone
这有啥,大部分人都是从 Windows 开始入门的,也并不妨碍获得编程和乐趣。
|
56
dingwen07 2022-05-17 10:24:04 +08:00
Windows 本地的开发就用 VS ,微软基本都给你弄好了
其它的直接 WSL2 啊,一点也不折腾,apt 比 homebrew 好用太多了 |
57
yedanten 2022-05-17 13:27:41 +08:00 via Android
凑合写,只有遇上 windows 无法解决的恶性 bug 才开个虚拟机,稍微歪个楼,并不赞同 node 对 windows 还算友好这句话,几年前之前 node 在 windows 下花式报错,npm 依赖都装不上 ,还有 node_module 层层嵌套,path 超出 max_length 限制,导致文件无法删除修改等等的一堆坑。go 在 indows 下开发可算是友好太多了
|
58
leeyuzhe 2022-05-17 13:30:10 +08:00
wsl2 + java 目前没什么致命缺陷
|
59
ysn2233 2022-05-17 13:34:03 +08:00
wsl2 大部分场景都没问题吧,至少 wsl2 比 mac 更接近原生 linux
|
61
CaptainD 2022-05-17 13:58:34 +08:00
wsl2 体验还是不错的,就是启动的时候有点慢?可能是我没配置好,没花精力去了解优化
|
62
Makabaka01 OP @dcsuibian 我试了一下是有问题的。。。好像是 stylus 的问题,启动后就发现网站 CSS 都没了
|
63
Makabaka01 OP @changnet 我写 Node 比较多,但 Node 的依赖是直接下载到工程文件里面的。。。所以跨系统连依赖都装不了
|
64
fgk 2022-05-17 15:05:24 +08:00
我也是用 wsl2
|
65
fuis 2022-05-17 15:08:36 +08:00
VMware 虚拟机 + x410
|
66
yoggsaron 2022-05-17 15:21:39 +08:00
node 和 go 我没发现啥问题( powershell),打包也都是 docker ,本机 docker 环境测试一下没问题,然后放在远程机器上再试一下。ruby 没开发过不做评论。
|
67
sbabybird 2022-05-17 15:34:04 +08:00
@wilhelmvonchen +10086
|
68
sbabybird 2022-05-17 15:37:40 +08:00
WSL2 目前也是我的主力开发环境,我还在里面装了 docker ,就更方便了,目前 win10 下已支持在 wsl2 中访问显卡进行 cuda 计算,没有障碍了。
|
69
flowerpiggy 2022-05-17 15:40:50 +08:00
cygwin
|
70
littlewing 2022-05-17 15:42:20 +08:00
wsl2
|
71
ShadowPower 2022-05-17 16:19:49 +08:00
除了 Ruby ,我好像没有遇到过任何问题
node 要装好 msvc go 要装好 gcc 遇到只兼容 Linux 的情况,则用 WSL/Docker for Windows 。例如需要运行 Redis 服务端 如果遇到问题,可以提供错误信息,一起看看…… |
72
Panic 2022-05-17 16:45:22 +08:00
综合考虑 WSL2 已经很好了吧
|
73
461da73c 2022-05-17 18:50:18 +08:00
谁没几台机器? WIndows + VSCode Remote 到远程 Linux 服务器开发。
|
74
FrankAdler 2022-05-17 19:36:38 +08:00
virtualbox 后台启动,共享代码目录,手动挂载还可以指定挂载的 uid 、gid ,还可以把内部的服务配置放到挂载的文件内然后软连接过去,systemd 设置所有相关的服务 after 共享文件挂载启动就好。
环境在虚拟机,代码在本地,挺好的,应该没啥用适配不了的情况。 |
75
jeffh 2022-05-17 20:02:01 +08:00
我在 win 下开发,然后开虚拟机,映射工程目录,在 linux 下可以运行
|
76
abcbuzhiming 2022-05-17 22:03:43 +08:00
@jsq2627 WSL2 的底层就是 haper-v 虚拟机,所以这东西比起开虚拟机的好处到底在哪里呢?
|
77
botman 2022-05-17 23:26:01 +08:00
win 我折腾了够了,已弃疗,这平台至少目前还没办法愉快,能用将就用,不行转 mac ,linux 只配在这俩怀里呆着,我现在双主机,开发多数用 mac ,少数 win ,总之我全都要
|
78
sunny2580839896 2022-05-18 09:07:19 +08:00
wsl2 现在内置 systemctl 了吗
|
79
flighter 2022-05-18 10:08:26 +08:00
wsl2 也一样有坑,还是建议虚拟机
|
80
churchill 2022-05-18 10:32:12 +08:00
@willx12123 wsl2 ,docker 很丝滑啊
node_modules 的问题用匿名卷不行吗 |
81
SMGdcAt4kPPQ 2022-05-18 10:54:44 +08:00 via Android
一直用 Windows 开发 .NET ,没有遇到一点问题
|
82
RandomK 131 天前
我的用法:笔记本电脑内存 48G ,windows + vmware (ubuntu 20.04 server edition) + vscode(remote ssh)。代码不放到 windows 里,全部放到 vm 里。windows 用来刷网页,看 B 站,各司其职。
|