V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
willx12123
V2EX  ›  程序员

如何使用 Windows 愉快的编程?

  •  2
     
  •   willx12123 · 2022-05-16 22:07:43 +08:00 · 8678 次点击
    这是一个创建于 707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是一个 Web 程序员,Go 、Ruby 、Node 、前端。一切与 Web 相关的我都做(除了 PHP 哈哈)。

    同时我也是一个 Windows 的喜爱者。可问题是我用 Windows 的事件越来越少——因为我无法在 Windows 上愉快的使用本地环境进行愉快的编程。

    像我刚刚所列出来的几项语言,对 Windows 都很不友好,大家都优先选择支持 Linux 和 Mac——甚至是 M1 的 arm 环境。

    • Ruby 就不多说了,老生常谈的 Windows 大坑。
    • Node 的话,我一直以为它对 Windows 的支持还算挺好的,直到我今天发现 Hexo 的最新版本创建的项目就没办法在 Windows 正常启动……
    • Go 的话,本身没啥问题,但是架不住很多人喜欢用 CGo ,这玩意儿要想在 Windows 上跑起来也是要费一番功夫的。

    所以有用 Windows 写代码兄弟吗,能介绍一下在大家都首选支持 Mac 和 Linux 的情况下,你平时如何解决这些环境问题的吗?

    81 条回复    2022-05-18 10:54:44 +08:00
    rekulas
        1
    rekulas  
       2022-05-16 22:11:53 +08:00
    作为成年人,我们一般都要,开虚拟机映射本地 win 开发 linux 运行
    wilhelmvonchen
        2
    wilhelmvonchen  
       2022-05-16 22:12:53 +08:00   ❤️ 4
    wsl2
    i3x
        3
    i3x  
       2022-05-16 22:13:40 +08:00 via Android
    ???不要搞混运行环境和编程环境。
    开发环境包含了调试机器和编程机器。远程开发并没有什么问题。在 windows 运行这些东西当然很麻烦。

    我在 windows 编辑。在目标机器调试。为什么要在自己的编程电脑开发调试呢。

    我从来不在本地运行调试代码。除非是临时搞个 win 的小工具。
    哪怕 php 也不会放在 windows 。何况 go python 之类的。这些东西引入了一些依赖到时候清理维护多麻烦,而虚拟环境也不是万能的。直接远程虚拟机或者本地开虚拟机,环境如果需要侵入式修改,有问题直接快照回退一秒就 ok 。虚拟机快照为开机状态,一秒就进入状态,多方便。
    willx12123
        4
    willx12123  
    OP
       2022-05-16 22:15:06 +08:00
    @rekulas 我用过一段时间 Docker ,别的体验还可以,但 Node 项目很不好弄,因为 node_modules 依赖和工程文件在一起。。。跨系统下载、写入大量小文件,整的 Node 项目的依赖都下不下来
    cmdOptionKana
        5
    cmdOptionKana  
       2022-05-16 22:15:47 +08:00
    - Ruby 只是小坑吧?
    - Hexo 的问题不能算 Windows 的问题,一大堆 Node 项目在 Windows 里没问题。
    - CGo 只要下载 TDM-GCC ,双击安装,一路点下一步确定即可,也不算麻烦(相当于安装一个软件而已)。

    还有什么问题?
    rekulas
        6
    rekulas  
       2022-05-16 22:16:17 +08:00
    @i3x 赞同,说实话不太建议用 wsl 之类的,因为我们之前就遇到过一些坑,跟真实环境有差异,虚拟机要靠谱很多
    willx12123
        7
    willx12123  
    OP
       2022-05-16 22:19:27 +08:00
    @i3x 请教下,有什么和虚拟机同步工程代码的工具推荐吗,Jet Brains 那个 SFTP 同步总是出问题,老少同步东西
    Buges
        8
    Buges  
       2022-05-16 22:20:32 +08:00 via Android
    willx12123
        9
    willx12123  
    OP
       2022-05-16 22:20:56 +08:00
    @cmdOptionKana Ruby China 的公告里都说的新手不要用 Windows hhhhh
    jsq2627
        10
    jsq2627  
       2022-05-16 22:22:38 +08:00
    WSL2 ,现在是我主力开发环境。跑公司复杂的 node / ruby / go / rust / python 等项目基本没啥问题。
    willx12123
        11
    willx12123  
    OP
       2022-05-16 22:23:31 +08:00
    @cmdOptionKana 主要是没碰到就是小概率,碰到了就是大坑。。。Windows 碰到大坑的概率就比其他俩系统高太多。。。
    i3x
        12
    i3x  
       2022-05-16 22:27:42 +08:00 via Android
    @rekulas +1
    既然最重要为线上服务所以肯定是直接高仿线上环境。wsl 跟线上差远了。


    @willx12123
    实在不行就共享文件夹。windows 挂载 linux 除了 samba nfs 客户端,甚至还可以 sshfs 。性能都不赖的。当我需要批量替换变量名称的时候,比本地固态硬盘还能快一些。
    duzhor
        13
    duzhor  
       2022-05-16 22:31:11 +08:00
    除开开发环境,生活娱乐方面 windows 已经很方便并且大家都习惯了,考虑虚拟机、云服务器作为单独的开发环境,远程或者 ssh 连接
    cmdOptionKana
        14
    cmdOptionKana  
       2022-05-16 22:33:40 +08:00
    @willx12123 这篇文章 https://ruby-china.org/topics/1020

    列出的理由有 6 个大点,好几十个小点,其中只有一个小点 “每年解决 Windows 上的奇怪问题” 是说 Windows 的问题(就这么一句笼统在话,没有具体细节),其余全部都是类以使用习惯之类的。


    @Buges 这个项目只是解决使用习惯的问题,错不在 Windows 系统吧?
    zhuangzhuang1988
        15
    zhuangzhuang1988  
       2022-05-16 22:34:06 +08:00
    那就选择 windows 友好的语言比如 c# java php 啥的。
    treblex
        16
    treblex  
       2022-05-16 22:36:05 +08:00
    vs code: remote wsl, remote server, remote docker
    ychost
        17
    ychost  
       2022-05-16 22:40:04 +08:00   ❤️ 1
    试试 C# 吧,配合 VS 直接起飞🛫
    Buges
        18
    Buges  
       2022-05-16 22:45:31 +08:00 via Android
    @cmdOptionKana 这个项目只是 Windows 上踩坑的一种体现。你要说错也没什么错的,哪个程序不支持 Windows 或在 Windows 上有 bug 也不能怪 Windows 啊。
    walpurgis
        19
    walpurgis  
       2022-05-16 22:56:19 +08:00
    win 本地环境不值得折腾,否则微软也不会花那么多代价去搞 wsl
    现在发展方向就是远程开发,让在远程开发像编辑本地项目一样,vscode remote 已经非常完美了,JB 家的还在 Beta ,能用,但 bug 还很多,需要经常重启,估计再过个半年一年就能成熟稳定了
    FrankHB
        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 。
    FrankHB
        21
    FrankHB  
       2022-05-16 23:09:07 +08:00
    @walpurgis WSL 不是这个原因而产生的,它的前身是意图在 Windows 上原生运行 Android app ,但因为种种原因黄了(很久之后 Win11 上 WOA 才被支持)。
    反过来,用你的逻辑,也说不通为什么微软仍然花更大的力气支持 VS (不是 VSC )这种根本就是 Windows-only 的开发环境——注意是持续投入资源推动大量的功能性更新,而不仅仅是维持可用。
    lance6716
        22
    lance6716  
       2022-05-16 23:16:49 +08:00 via Android   ❤️ 1
    wsl IO 性能太差,大项目根本没法忍
    2NUT
        23
    2NUT  
       2022-05-16 23:17:56 +08:00
    remote ssh
    ila
        24
    ila  
       2022-05-16 23:23:26 +08:00 via Android
    wsl 的比 wsl2 简单些。
    本地写完了,还是要上 dev 机器。
    EIJAM
        25
    EIJAM  
       2022-05-16 23:31:12 +08:00 via iPhone
    黄鱼处理掉吧,或者装个 Linux 桌面发行版。等你折腾久了就发现还是换个系统比较简单。
    HubOwO
        26
    HubOwO  
       2022-05-16 23:31:30 +08:00 via Android
    @jsq2627 git 会很慢吧
    agagega
        27
    agagega  
       2022-05-16 23:32:54 +08:00
    IDEA 系对 WSL 的支持还行。RubyMine 支持通过 WSL 访问 rbenv ,run 命令啥的还有各种问题,毕竟 WSL 再怎么也没有 macOS/Linux 那么无缝,只能说将就用吧。
    jsq2627
        28
    jsq2627  
       2022-05-16 23:45:30 +08:00
    @HubOwO 我指的是 WSL2 ,把他当 vm 看待就好了,所有文件操作不要跨 vm 进行,仓库不要克隆在 /mnt 下面,性能杠杠的。还有很重要的一点,我在搭配 vscode remote extension 使用,因此基本不会产生跨系统文件 IO
    willx12123
        29
    willx12123  
    OP
       2022-05-17 00:21:40 +08:00
    @walpurgis Bug 巨多,目前 JB 家我感觉比较好用的还是 Projector ,就是有点卡
    dayeye2006199
        30
    dayeye2006199  
       2022-05-17 01:12:40 +08:00
    WSL+IDE SSH 远程插件。

    对环境有洁癖的就 vagrant 走 hyper-v 虚拟机,然后远程插件。

    觉得这还不行的,那就买台台式机装 linux ,然后远程插件。

    或者你可以用远端的 vscode ,例如 github codespace ,gitpod ,coder 这种环境。
    dcsuibian
        31
    dcsuibian  
       2022-05-17 01:19:58 +08:00
    要底层 C 的,那跨平台性应该不太好弄。还是老老实实装个虚拟机或换台 mac 吧。

    测试了下,windows 下最新版 hexo 安装启动都没啥问题。
    nodejs 大部分的库应该都是跨平台的,只有很少部分不是:目前只记得有 node-sass 和 opencv ,因为下面是 C/C++。前者现在被跨平台的 dart-sass 淘汰了。
    前端应该不用担心这个问题,毕竟用 windows 的开发者也很多。(甚至有可能是大多数)
    ginakira
        32
    ginakira  
       2022-05-17 01:20:33 +08:00
    VirtualBox 开分离模式,关掉界面的窗口后台运行,Visual Studio Code Remote 写代码,Tabby 做终端模拟器 SSH 过去
    shuimugan
        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 内存放游戏,非常愉悦。
    ColinChang
        34
    ColinChang  
       2022-05-17 02:05:43 +08:00
    很多最新的插件用 windows 简直了。。。
    最近碰到的:1. java-grpc 的 maven 插件,windows 版一直过不去 maven 检查
    2. go-grpc 如楼主所说
    3. go-ent&entimport 无法读取数据库
    HubOwO
        35
    HubOwO  
       2022-05-17 07:56:52 +08:00 via Android
    @jsq2627 原来这么回事,我试试
    to2false
        36
    to2false  
       2022-05-17 08:36:19 +08:00
    vscode remote ssh+虚拟机 /wsl2
    justrand
        37
    justrand  
       2022-05-17 08:41:52 +08:00
    我用的是 vagrant + virturlbox + debian + docker
    IDE 和代码还是放在 win 环境下,用共享文件来操作 io 。
    配置好后打包个 box ,在任何电脑安装开发环境很快的。
    demoshengxw
        38
    demoshengxw  
       2022-05-17 08:47:54 +08:00 via iPhone
    我是 go 和 php 都搞,docker 自己写好编排文件。基本不区分平台,很方便
    shabbyin
        39
    shabbyin  
       2022-05-17 08:52:11 +08:00
    我是把 wsl2 当另一个操作系统来用了
    独立的 ssh key 独立的 workspace 所有工作代码全部在 wsl2 路径中
    目前没遇到什么太奇怪的问题 经常会出现 webstorm 报 git error code
    taest
        40
    taest  
       2022-05-17 08:59:21 +08:00
    还好,我是 java
    zjsxwc
        41
    zjsxwc  
       2022-05-17 09:01:01 +08:00
    windows 只有 C#与 TypeScript 是最合适的。
    php 对 windows 支持很差的。
    gam2046
        42
    gam2046  
       2022-05-17 09:04:23 +08:00
    我自己做过 Go 与 node 这一块,vs code remote ssh 是非常好的选择,既获得了较好的 UI 体验,也获得工具链的便利性。
    codefun666
        43
    codefun666  
       2022-05-17 09:04:53 +08:00
    为啥要用 Windows 编程?
    ikaros
        44
    ikaros  
       2022-05-17 09:09:09 +08:00
    我绝大部分时间用 windows 开发, cgo 装个 tdm-gcc 就行了,另外几个老是出问题,就 tdm-gcc 这个用下来基本没啥问题
    theprimone
        45
    theprimone  
       2022-05-17 09:10:54 +08:00
    我也 WSL2 ,虽然我基本只用 node
    adoal
        46
    adoal  
       2022-05-17 09:11:46 +08:00
    用 Windows 要愉快编程……老老实实选微软御用技术栈呗。
    eudore
        47
    eudore  
       2022-05-17 09:16:23 +08:00
    虚拟机和云服务器调试 go ,win vsc 调试 flutter ,部署就云服务器 docker 润。
    lizhenda
        48
    lizhenda  
       2022-05-17 09:19:34 +08:00
    不要纠结,能用就行
    yinzhili
        49
    yinzhili  
       2022-05-17 09:22:10 +08:00
    Java 虚拟机不能跨平台吗?.NET 运行时不能跨平台吗? PHP 不能跨平台吗?
    有什么可矫情的。
    Cloutain
        50
    Cloutain  
       2022-05-17 09:23:05 +08:00
    做了几年的 Windows 上下层开发,搞不懂用 Windows 开发哪里不愉快了
    changnet
        51
    changnet  
       2022-05-17 09:52:25 +08:00
    @willx12123 为啥要同步工程代码?我都是直接把 win 下的目录共享到 VirtualBox ( VMware 也有类似的功能)里的虚拟机,在里面可以直接用这个目录

    一般都不会有问题。极少数情况不兼容,比如解压 tar.gz 的包里要创建软链接,或者 coredump 无法在这个目录创建,但很少遇到或者或者绕过
    shenqi
        52
    shenqi  
       2022-05-17 10:09:27 +08:00
    以前用 win 的年代的时候使用 vagrant 。
    用 mac 之后,就不管了。
    liuyibao
        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 里。
    richardwong
        54
    richardwong  
       2022-05-17 10:17:52 +08:00
    买一台 mac
    节省下来折腾的时间刷刷数据结构或算法
    或者打开 win 来一把游戏
    你的心情会愉悦很多
    wonderfulcxm
        55
    wonderfulcxm  
       2022-05-17 10:22:01 +08:00 via iPhone
    这有啥,大部分人都是从 Windows 开始入门的,也并不妨碍获得编程和乐趣。
    dingwen07
        56
    dingwen07  
       2022-05-17 10:24:04 +08:00
    Windows 本地的开发就用 VS ,微软基本都给你弄好了
    其它的直接 WSL2 啊,一点也不折腾,apt 比 homebrew 好用太多了
    yedanten
        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 下开发可算是友好太多了
    leeyuzhe
        58
    leeyuzhe  
       2022-05-17 13:30:10 +08:00
    wsl2 + java 目前没什么致命缺陷
    ysn2233
        59
    ysn2233  
       2022-05-17 13:34:03 +08:00
    wsl2 大部分场景都没问题吧,至少 wsl2 比 mac 更接近原生 linux
    lekai63
        60
    lekai63  
       2022-05-17 13:39:54 +08:00   ❤️ 1
    写.net 就好了。。
    CaptainD
        61
    CaptainD  
       2022-05-17 13:58:34 +08:00
    wsl2 体验还是不错的,就是启动的时候有点慢?可能是我没配置好,没花精力去了解优化
    willx12123
        62
    willx12123  
    OP
       2022-05-17 14:49:48 +08:00
    @dcsuibian 我试了一下是有问题的。。。好像是 stylus 的问题,启动后就发现网站 CSS 都没了
    willx12123
        63
    willx12123  
    OP
       2022-05-17 14:53:03 +08:00
    @changnet 我写 Node 比较多,但 Node 的依赖是直接下载到工程文件里面的。。。所以跨系统连依赖都装不了
    fgk
        64
    fgk  
       2022-05-17 15:05:24 +08:00
    我也是用 wsl2
    fuis
        65
    fuis  
       2022-05-17 15:08:36 +08:00
    VMware 虚拟机 + x410
    yoggsaron
        66
    yoggsaron  
       2022-05-17 15:21:39 +08:00
    node 和 go 我没发现啥问题( powershell),打包也都是 docker ,本机 docker 环境测试一下没问题,然后放在远程机器上再试一下。ruby 没开发过不做评论。
    sbabybird
        67
    sbabybird  
       2022-05-17 15:34:04 +08:00
    sbabybird
        68
    sbabybird  
       2022-05-17 15:37:40 +08:00
    WSL2 目前也是我的主力开发环境,我还在里面装了 docker ,就更方便了,目前 win10 下已支持在 wsl2 中访问显卡进行 cuda 计算,没有障碍了。
    flowerpiggy
        69
    flowerpiggy  
       2022-05-17 15:40:50 +08:00
    cygwin
    littlewing
        70
    littlewing  
       2022-05-17 15:42:20 +08:00
    wsl2
    ShadowPower
        71
    ShadowPower  
       2022-05-17 16:19:49 +08:00
    除了 Ruby ,我好像没有遇到过任何问题
    node 要装好 msvc
    go 要装好 gcc
    遇到只兼容 Linux 的情况,则用 WSL/Docker for Windows 。例如需要运行 Redis 服务端

    如果遇到问题,可以提供错误信息,一起看看……
    Panic
        72
    Panic  
       2022-05-17 16:45:22 +08:00
    综合考虑 WSL2 已经很好了吧
    461da73c
        73
    461da73c  
       2022-05-17 18:50:18 +08:00
    谁没几台机器? WIndows + VSCode Remote 到远程 Linux 服务器开发。
    FrankAdler
        74
    FrankAdler  
       2022-05-17 19:36:38 +08:00
    virtualbox 后台启动,共享代码目录,手动挂载还可以指定挂载的 uid 、gid ,还可以把内部的服务配置放到挂载的文件内然后软连接过去,systemd 设置所有相关的服务 after 共享文件挂载启动就好。
    环境在虚拟机,代码在本地,挺好的,应该没啥用适配不了的情况。
    jeffh
        75
    jeffh  
       2022-05-17 20:02:01 +08:00
    我在 win 下开发,然后开虚拟机,映射工程目录,在 linux 下可以运行
    abcbuzhiming
        76
    abcbuzhiming  
       2022-05-17 22:03:43 +08:00
    @jsq2627 WSL2 的底层就是 haper-v 虚拟机,所以这东西比起开虚拟机的好处到底在哪里呢?
    botman
        77
    botman  
       2022-05-17 23:26:01 +08:00
    win 我折腾了够了,已弃疗,这平台至少目前还没办法愉快,能用将就用,不行转 mac ,linux 只配在这俩怀里呆着,我现在双主机,开发多数用 mac ,少数 win ,总之我全都要
    sunny2580839896
        78
    sunny2580839896  
       2022-05-18 09:07:19 +08:00
    wsl2 现在内置 systemctl 了吗
    flighter
        79
    flighter  
       2022-05-18 10:08:26 +08:00
    wsl2 也一样有坑,还是建议虚拟机
    churchill
        80
    churchill  
       2022-05-18 10:32:12 +08:00
    @willx12123 wsl2 ,docker 很丝滑啊
    node_modules 的问题用匿名卷不行吗
    SMGdcAt4kPPQ
        81
    SMGdcAt4kPPQ  
       2022-05-18 10:54:44 +08:00 via Android
    一直用 Windows 开发 .NET ,没有遇到一点问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   973 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 20:29 · PVG 04:29 · LAX 13:29 · JFK 16:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.