V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
FakeLeung
V2EX  ›  问与答

win10 现在有 WSL 了,但是为什么不能在上面做开发?

  •  
  •   FakeLeung · 2019-01-25 11:40:16 +08:00 · 9489 次点击
    这是一个创建于 2116 天前的主题,其中的信息可能已经有所发展或是发生改变。

    已经装了一个 ubuntu18.04 。

    在 ubuntu18 上,用 vue-cli 新建了一个项目,然后在本机用 sublime text3 和 vscode 打开,对其中的文件进行编辑,保存后,不会自动更新。甚至,重启项目也是不能刷新视图。

    那么,到底在 wsl 中建项目,在 windows 下编辑文件这样的开发方式,可行不可行?

    第 1 条附言  ·  2019-01-29 09:45:18 +08:00

    windows 上用 wsl 辅助前端开发确实是可行的。

    应用商店安装一个 linux 子系统后,重启,就能用了。可以用 shift + 右键 打开 linux shell,也可以使用 其他 shell 工具进入。

    然后在 linux cd 到 /mnt/ 下就是挂载的各种盘,进去即可。然后像一般的 linux 开发就好了。

    45 条回复    2019-01-29 09:45:43 +08:00
    lithiumii
        1
    lithiumii  
       2019-01-25 11:45:24 +08:00
    很多东西 WSL 用不了( e.g., FUSE, MongoDB,当然 MongoDB 完全可以用 Windows 版),毕竟不是一个完整的系统。所以说能不能做开发还是看你到底在开发什么。
    FakeLeung
        2
    FakeLeung  
    OP
       2019-01-25 11:48:41 +08:00
    @lithiumii #1
    因为 windows 下的环境太操蛋了,比如 git ssh 什么的。

    所以想着,在 wsl 下新建项目,在 windows 下编辑。同时在 wsl 下进行 git ssh sed 等操作。

    ps:linux 虚拟机,分配 8g 内存跑个 vscode 就卡爆,不知道为啥。
    treblex
        3
    treblex  
       2019-01-25 11:49:58 +08:00 via Android
    nodejs 项目的话,可行
    EridanusSora
        4
    EridanusSora  
       2019-01-25 11:50:31 +08:00 via Android
    你看下 console 有没报错?可能他 hot reload 走了 192 那个地址..
    FakeLeung
        5
    FakeLeung  
    OP
       2019-01-25 11:50:55 +08:00 via Android
    @suke971219 现在 vue cli 貌似不行。
    FakeLeung
        6
    FakeLeung  
    OP
       2019-01-25 11:51:15 +08:00 via Android
    @EridanusSora 没有噢。看截图。
    agdhole
        7
    agdhole  
       2019-01-25 11:51:28 +08:00 via Android
    要在共享目录 mnt 下编辑
    wly19960911
        8
    wly19960911  
       2019-01-25 11:52:27 +08:00 via Android
    @FakeLeung vue-cli 一直可以,我一直是前端项目用 wsl 处理
    lithiumii
        9
    lithiumii  
       2019-01-25 11:53:35 +08:00
    @FakeLeung Powershell 早就能完美 Git 和 SSH 了吧,虽然我日常也是用 WSL 搞这些。话说微软是明确反对你直接用 Windows 侧的软件修改 WSL 下的文件的(但是反过来可以),因为文件系统不一样可能出问题.

    https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/
    wly19960911
        10
    wly19960911  
       2019-01-25 11:54:15 +08:00 via Android
    但是我发现一个问题是,有时候修改不会立即 watch 到重新编译,但是我 angular 一直没问题(我是 angular 开发)。所以好奇为什么 vue 会这样,但是大部分情况没问题
    FakeLeung
        11
    FakeLeung  
    OP
       2019-01-25 11:58:31 +08:00
    @lithiumii #9

    唉,反正我的 ps 不知道为啥,一直提示我 git node 不存在,不能直接使用。即使能用,推到 gitlab 也是 permission denied。即使我加入了 key。
    chungzhao
        12
    chungzhao  
       2019-01-25 12:02:49 +08:00
    Windows 侧好像不能修改 wsl 那边的文件的,只能 wsl 修改 wsl 的。
    laogui
        13
    laogui  
       2019-01-25 12:04:54 +08:00 via Android
    用了好几年了,前后端都没问题,node,MySQL,php,go 这些都统统装在 wsl 里。要用自动挂载的 mnt 目录。
    johnniang
        14
    johnniang  
       2019-01-25 12:05:49 +08:00 via Android
    似乎需要装一个 vue-load 插件
    geelaw
        15
    geelaw  
       2019-01-25 12:06:17 +08:00   ❤️ 13
    你不能这样做,因为你不应该透过 Win32 访问 WSL 的文件系统,因为 Win32 程序根本不会知道 WSL 是什么,这样做可能会损坏 WSL 的文件系统,而 WSL 也并不期待自己的文件系统被别的程序乱动。

    你可以在 WSL 里面的 /mnt/C/Users/你的用户名 /Documents/project1 里面运行你喜欢的 Linux 工具,也就是说,你可以在 WSL 里面通过 Linux Subsystem 访问 Win32 控制的部分(因为 WSL 使用的 NTFS 更底层、更少抽象,不像 Win32 app 不需要知道底层文件系统,WSL 永远运行在 NTFS 上),WSL 是知道这部分文件系统通常归 Win32 使用,所以能够处理其中的变化。

    除了从技术实现层面的“是否感知”来理解这个问题,你还可以通过“独立存储”这个概念来理解这个问题,算是更抽象的一种理解(从软件模型的基本假设开始)。

    WSL 的实现是一个 Appx Package,它的独立存储(例如你正在访问的 %USERPROFILE%\AppData\Local\Packages\<PackageFamilyName>\LocalState 是完全属于这个 Appx Package 的,Appx Package 应当假设没有任何人修改这部分文件。换言之,即使你尝试编辑一个 UWP app 或者通过 Store 分发的 Win32 app 的这个文件夹,也会导致 undefined behavior,因为所有的 Appx Package 都是基于“我的独立存储是我自己控制的”这个假设来编写和运行的。

    再类比一下的话,考虑 Word,它会存储一些设置在 AppData 文件夹里面,也会允许用户把文档保存在 Documents 里面。Word 的编写和运行是基于“用户不能乱动我的 AppData ”这个假设的,因此用户不能动它的 AppData,如果用户胡乱剪切、粘贴 AppData 里面的文件,那么 Word 可能崩溃或者恢复出厂设置,用户如果把 AppData 从一台电脑复制到另一台电脑,Word 不保证这些内容对应的效果在另一台电脑上是有效的。但是它并不假设“用户不能动自己的 Documents ”,所以你的文档保存在 Documents 里面,你可以随便移动、复制你的文档,Word 仍然可以打开移动过的、复制过的文档,你可以把文档发送到另一台电脑,那么另一台电脑的 Word 也必须可以打开收到的文件。

    用 WSL 在 WSL 的 /Users/WSLUserName/Documents 里面建立文件,再用 Win32 app 去访问 %USERPROFILE%\AppData\Local\Packages\<WSLPackageFamilyName>\LocalState\rootfs\Users\WSLUserName\Documents,就相当于乱动 Word 的 AppData,WSL 不需要处理这种情况。

    用 WSL 在 WSL 的 /mnt/C/Users/WindowsUserName/Documents 里面建立文件,再用 Win32 app 去访问 C:\Users\WindowsUserName\Documents 里面的文件,就相当于用户操作自己的“我的文档”里面的文件,例如把文件复制到另一台电脑上修改再复制回来,WSL 当然应该正确处理。
    johnniang
        16
    johnniang  
       2019-01-25 12:06:39 +08:00 via Android
    @johnniang 更正一下: vue-loader

    https://vue-loader.vuejs.org
    wly19960911
        17
    wly19960911  
       2019-01-25 12:08:41 +08:00 via Android
    等等,你居然 Windows 修改 wsl ??

    /t/461903

    你注意下 wsl 挂载了 Windows 的分区,直接访问 Windows 就好
    chaleaochexist
        18
    chaleaochexist  
       2019-01-25 12:14:52 +08:00
    python 不行. 解释器不可执行.
    GenkunAbe
        19
    GenkunAbe  
       2019-01-25 12:20:59 +08:00 via Android   ❤️ 1
    直接在 wsl 下创建软链接到一个 Windows 下方便访问的目录(比如简单点就是桌面:ln -s /mnt/c/users/xxx/Desktop ~/Desktop),就不会出现这样的问题了。
    hisune
        20
    hisune  
       2019-01-25 12:35:34 +08:00
    我就是后端所有环境放 wsl,php+nginx+mysql+redis+mongo+node,用了 1 年多了,开机自启动,感觉用起来很爽
    OhYee
        21
    OhYee  
       2019-01-25 13:05:39 +08:00
    亲测可行,感觉是你的某些操作导致了别的问题,建议给出更详细的信息
    FakeLeung
        22
    FakeLeung  
    OP
       2019-01-25 14:02:03 +08:00
    @johnniang #14
    这个 cli 自带的。


    @wly19960911 #17
    3emmmmm 是的。。。

    @OhYee #21
    其实就是,在 wsl 中 mkdir 了一个文件夹,然后在 windows 下编辑这个文件夹中的内容。

    @geelaw #15
    好,我试试 wsl 跑 windows 下的文件。
    20015jjw
        23
    20015jjw  
       2019-01-25 14:17:59 +08:00 via Android
    别跟自己过不去 有钱 mac 没钱黑苹果 /Ubuntu
    cholerae
        24
    cholerae  
       2019-01-25 14:28:32 +08:00
    稍微底层点的代码,如果测试出了问题,怎么确定是 wsl 的 bug 还是自己代码的 bug ?
    johnniang
        25
    johnniang  
       2019-01-25 14:34:57 +08:00 via Android
    @FakeLeung 能检查一下 package.json 中是否有 vue-loader vue-template-compiler 么
    FakeLeung
        26
    FakeLeung  
    OP
       2019-01-25 14:51:26 +08:00
    @johnniang #25
    肯定有的 老铁。。。

    @20015jjw #23
    有 mbp15 和一台 ubuntu,不过这俩都在家。
    这台 win10 是在公司用的,主要是想开虚 an 拟 zhuo 机 xuniji。
    wangxinpier
        27
    wangxinpier  
       2019-01-25 15:42:47 +08:00
    wls 我之前想用他玩 docker,测试后,一有些问题总是解决不了,还是放弃了,偶尔尝试一下可以,出了问题,想解决就可能比较难搞了。
    hmzt
        28
    hmzt  
       2019-01-25 16:43:55 +08:00
    windows 下编辑?如果你只想要图形界面的话,装个图形界面不就好了
    Rafoluk
        29
    Rafoluk  
       2019-01-25 18:58:57 +08:00
    不能用 windows 编辑 wsl 文件的,要么两边都操作操作 windows 的文件(/mnt),要么直接在 wsl 安装 linux 版的编辑器
    mmdsun
        30
    mmdsun  
       2019-01-25 19:24:15 +08:00 via Android
    java 测试环境,乌班图 wsl。只是 wsl IO 有点差。建议用 hyper-v
    vanishcode
        31
    vanishcode  
       2019-01-25 19:24:54 +08:00 via Android
    太监子系统。。。。
    mmdsun
        32
    mmdsun  
       2019-01-25 19:25:18 +08:00 via Android
    wsl 访问 win 目录 加 /mnt 就行。完全没问题
    libook
        33
    libook  
       2019-01-25 19:47:00 +08:00 via Android   ❤️ 1
    我是在 win 下装 xserver,然后 wsl 连 win 下的 xserver 展示图形界面。理论上可以用 xserver 在 wsl 下用 IDE 开发。
    libook
        34
    libook  
       2019-01-25 19:53:39 +08:00 via Android   ❤️ 1
    watch 和 git 的追踪功能都是用操作系统的 API 实现的,wsl 和 win 还是两个操作系统,各自有各自的 API 来实现监听文件修改的功能,又因为 wsl 运行于 win 之上,所以 wsl 内修改文件的时候 win 是知道的,但 win 修改文件 wsl 是无法知道的。
    FakeLeung
        35
    FakeLeung  
    OP
       2019-01-25 22:04:13 +08:00 via Android
    @mmdsun 其实我知道挂载在哪,只是不想看见这些测试项目罢了。
    FakeLeung
        36
    FakeLeung  
    OP
       2019-01-25 22:04:55 +08:00 via Android
    @libook 好吧,原来是这样的。
    rawidn
        37
    rawidn  
       2019-01-25 23:34:53 +08:00 via Android
    wsl io 性能太差了,跟正常的 linux 根本不是一个量级
    huclengyue
        38
    huclengyue  
       2019-01-25 23:39:16 +08:00 via Android
    @libook 之前这么想过,但是没这么干过。这么干会有明显的性能问题吗
    koodai
        39
    koodai  
       2019-01-25 23:54:52 +08:00 via iPhone
    python3 使用 notebook 做数据分析,配合 excel,PowerPoint 这些生产力工具,简直舒服的想呻吟出来。
    Linux 下的 Office 套件真的没有 MS 的好用,Mac 下的 Office 更是残。
    Ubuntu 下做数据,shell 里面很多指令简直高效到令人发指。

    感谢 wsl 这伟大的发明!
    dreamtrail
        40
    dreamtrail  
       2019-01-26 00:08:37 +08:00   ❤️ 2
    超好用,以前在 windows 上面搭个开发平台是很操蛋的事情,而且环境也不同,现在变得太简单了
    liprais
        41
    liprais  
       2019-01-26 00:43:40 +08:00 via iPhone
    wsl 磁盘性能垃圾,需要把实时防病毒关了才稍微好一点
    libook
        42
    libook  
       2019-01-26 20:06:57 +08:00 via Android
    @huclengyue 我只跑了个 terminator,没问题,个人感觉性能上不如虚拟机,如果你的 win 硬件还不错的话性能应该能忍。

    我没成功启动 gnome,能折腾的话可以研究一下。启动一个 terminal emulator +一个 IDE 估计是 OK 的。
    huclengyue
        43
    huclengyue  
       2019-01-26 23:50:13 +08:00 via Android
    @libook 性能不如虚拟机看到这个就想放弃了🙄
    libook
        44
    libook  
       2019-01-27 15:49:07 +08:00 via Android
    有文件改动监听的功能得注意一下,watch 和 git 的追踪功能都是用操作系统的 API 实现的,wsl 和 win 还是两个操作系统,各自有各自的 API 来实现监听文件修改的功能,又因为 wsl 运行于 win 之上,所以 wsl 内修改文件的时候 win 是知道的,但 win 修改文件 wsl 是无法知道的。

    @FakeLeung
    FakeLeung
        45
    FakeLeung  
    OP
       2019-01-29 09:45:43 +08:00
    @libook #44
    wsl 确实可以用的,只是我反过来使用了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:53 · PVG 19:53 · LAX 03:53 · JFK 06:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.