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

2019-01-25 11:40:16 +08:00
 FakeLeung

已经装了一个 ubuntu18.04 。

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

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

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

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

ps:linux 虚拟机,分配 8g 内存跑个 vscode 就卡爆,不知道为啥。
treblex
2019-01-25 11:49:58 +08:00
nodejs 项目的话,可行
EridanusSora
2019-01-25 11:50:31 +08:00
你看下 console 有没报错?可能他 hot reload 走了 192 那个地址..
FakeLeung
2019-01-25 11:50:55 +08:00
@suke971219 现在 vue cli 貌似不行。
FakeLeung
2019-01-25 11:51:15 +08:00
@EridanusSora 没有噢。看截图。
agdhole
2019-01-25 11:51:28 +08:00
要在共享目录 mnt 下编辑
wly19960911
2019-01-25 11:52:27 +08:00
@FakeLeung vue-cli 一直可以,我一直是前端项目用 wsl 处理
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
2019-01-25 11:54:15 +08:00
但是我发现一个问题是,有时候修改不会立即 watch 到重新编译,但是我 angular 一直没问题(我是 angular 开发)。所以好奇为什么 vue 会这样,但是大部分情况没问题
FakeLeung
2019-01-25 11:58:31 +08:00
@lithiumii #9

唉,反正我的 ps 不知道为啥,一直提示我 git node 不存在,不能直接使用。即使能用,推到 gitlab 也是 permission denied。即使我加入了 key。
chungzhao
2019-01-25 12:02:49 +08:00
Windows 侧好像不能修改 wsl 那边的文件的,只能 wsl 修改 wsl 的。
laogui
2019-01-25 12:04:54 +08:00
用了好几年了,前后端都没问题,node,MySQL,php,go 这些都统统装在 wsl 里。要用自动挂载的 mnt 目录。
johnniang
2019-01-25 12:05:49 +08:00
似乎需要装一个 vue-load 插件
geelaw
2019-01-25 12:06:17 +08:00
你不能这样做,因为你不应该透过 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
2019-01-25 12:06:39 +08:00
@johnniang 更正一下: vue-loader

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

/t/461903

你注意下 wsl 挂载了 Windows 的分区,直接访问 Windows 就好
chaleaochexist
2019-01-25 12:14:52 +08:00
python 不行. 解释器不可执行.
GenkunAbe
2019-01-25 12:20:59 +08:00
直接在 wsl 下创建软链接到一个 Windows 下方便访问的目录(比如简单点就是桌面:ln -s /mnt/c/users/xxx/Desktop ~/Desktop),就不会出现这样的问题了。
hisune
2019-01-25 12:35:34 +08:00
我就是后端所有环境放 wsl,php+nginx+mysql+redis+mongo+node,用了 1 年多了,开机自启动,感觉用起来很爽

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/530523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX