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

如何使用 Windows 愉快的编程?

  •  2
     
  •   willx12123 · 39 天前 · 6061 次点击
    这是一个创建于 39 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是一个 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  
       39 天前
    作为成年人,我们一般都要,开虚拟机映射本地 win 开发 linux 运行
    wilhelmvonchen
        2
    wilhelmvonchen  
       39 天前   ❤️ 4
    wsl2
    i3x
        3
    i3x  
       39 天前 via Android
    ???不要搞混运行环境和编程环境。
    开发环境包含了调试机器和编程机器。远程开发并没有什么问题。在 windows 运行这些东西当然很麻烦。

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

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

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


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

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


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

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

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

    或者你可以用远端的 vscode ,例如 github codespace ,gitpod ,coder 这种环境。
    dcsuibian
        31
    dcsuibian  
       39 天前
    要底层 C 的,那跨平台性应该不太好弄。还是老老实实装个虚拟机或换台 mac 吧。

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

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

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