You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
$ yarn config get script-shell
C:\Program Files\git\bin\bash.exe
然后我尝试将 script-shell 直接设置成 bash 之后就成功了:
xxx@DESKTOP:/mnt/c/Users/xxx/hcfy-backend$ yarn config set script-shell bash
yarn config v1.22.5
success Set "script-shell" to "bash".
Done in 0.05s.
xxx@DESKTOP:/mnt/c/Users/xxx/hcfy-backend$ yarn t
yarn run v1.22.5
$ docker-compose -v
docker-compose version 1.27.4, build 40524192
Done in 0.37s.
在 WSL 里,Windows 的文件被存放在 /mnt 下,例如,Windows 里的 C:\Users\xxx 在 WSL 里是 /mnt/c/Users/xxx。但是如果我们将项目的文件存放在 /home/xxx/ 下面,那么 watch 是可以正常检测到文件变化的,而且使用 WSL 的文件系统还可以让运行速度提升,见 Place your Linux files in your Linux root file system。
开发划词翻译的服务端时,我是直接在 Windows 10 上开发的,但会遇到一些问题,最不方便的就是终端命令不一样。比如为了删除某个文件,在 Bash 里用的是
rm file
,但在 Windows 10 的 PowerShell 里就不一样,我目前的做法是用 shx,但这样饶了一圈比较麻烦。我今天突然想到,是不是可以在开发时让代码直接跑在 Windows 10 的 WSL Ubuntu 里?试了一下确实是可以的。
配置 WSL 让项目能在 Ubuntu 里运行
以划词翻译的服务端项目为例,假设我的项目地址在
C:\Users\xxx\hcfy-backend
,那么首先在 PowerShell 打开这个地址,然后输入wsl
就能进入 Ubuntu 里的这个地址了,如下:但是在 Ubuntu 里输入
docker -v
会提示找不到docker
命令,需要先在 Docker Desktop 里开启对 WSL 2 的支持,然后再运行docker -v
就成功了:然后,为了让项目能在 Ubuntu 环境下开发,我还在 Ubuntu 里做了这些事情:
经过以上几个步骤之后,就可以正常在 Ubuntu 里使用 yarn、docker 和 docker-compose 了,但接下来还有两个问题要解决。
Ubuntu 里的项目地址变得很长
在经过以上几个步骤之后,在 PowerShell 里输入
wsl
之后,进入到的 Ubuntu 里的地址变得很长:在这个目录下的文件跟 hcfy-backend 目录下的是一样的,但是我希望文件地址应该是正常的
/mnt/c/Users/xxx/hcfy-backend
,后来在这里找到了答案:Long working directory in bash when Docker desktop is running in WSL2
简单来说就是要先启动 Docker Desktop,然后再用 wsl 进入 Ubuntu,就不会有这个问题。
无法通过 yarn 运行命令
同一条命令,直接在 bash 里可以运行,但如果写到 package.json 里的 "scripts" 里用 yarn 运行就会报错。
例如,直接在 bash 里运行
docker-compose -v
是可以正常输出docker-compose version 1.27.4, build 40524192
的。但如果我把这条命令写在了 scripts 里:
然后用
yarn t
运行就会报错:我谷歌到了这条 issue 下的一个评论,于是在 Ubuntu 里运行了这条命令:
然后我尝试将
script-shell
直接设置成bash
之后就成功了:webpack --watch
失效了在 Ubuntu 里使用
webpack --watch
后,发现在 Windows 10 里改变了这些文件并没有触发 Webpack 的重新编译。有两种解决方案:
true
第一种方案最为简单便捷,所以我一开始用了第一种,但是监听文件改变似乎不太及时,又折腾成了第二种。
第二种方案稍微有点复杂……
在 WSL 里,Windows 的文件被存放在
/mnt
下,例如,Windows 里的C:\Users\xxx
在 WSL 里是/mnt/c/Users/xxx
。但是如果我们将项目的文件存放在/home/xxx/
下面,那么 watch 是可以正常检测到文件变化的,而且使用 WSL 的文件系统还可以让运行速度提升,见 Place your Linux files in your Linux root file system。我按照这些步骤让项目在 WSL 的文件系统下运行:
/home/xxx/porjects
。最好是给 GItHub 账号配置 SSH 的克隆方式。\\wsl$\Ubuntu\home\xxx\projects\项目文件夹
。其中\\wsl$
是跟C:\
平齐的,如果打开项目时没有\\wsl$
,那么可能需要先在 WSL 里运行一下explorer.exe .
。其余需要加载文件的地方(例如开发 Chrome 扩展时需要载入解压的扩展文件夹)也加载\\wsl$
下的文件即可。目前这种方式的使用感受:
在 WebStorm 里修改一些 WSL 相关的配置
项目配置好了,但是 WebStorm 里使用的终端还是 Windows 10 默认的 PowerShell,需要改变这些设置:
\n
;已经有的文件可以在选中文件夹后,通过菜单栏中的“文件” - “文件属性” - “行分隔符” 进行批量替换。这就是在 WebStorm 里需要做的全部设置了。
如果你想让之前运行在 Windows 10 上的其它 WebStrom 项目也切换到 Ubuntu 里运行,那么这些 WebStrom 项目也需要进行上面两步的设置,不然在 WebStrom 里会运行不起来。
在 WebStorm 里编辑 WSL 里的项目的另一种方式:远程连接
前面的方法使用 WebStorm 直接打开了 WSL 里的项目目录,然后修改了“终端”和“Node.js 解释器”,这种情况下,WebStorm 是直接编辑 & 运行 WSL 里的项目的。
现在,WebStorm 支持通过另一种方式编辑 WSL 里的项目,即“远程连接”。
这个功能就如同它的名字一样,它实际上是在 WSL Ubuntu 里安装了一个控制端,然后在 Windows 里以“远程控制”的方式来编辑 & 运行 WSL Ubuntu 里的项目。它们之间通过网络连接。
这样做有一些好处:
但“远程连接”目前使用下来也有一些不好的点:
总的来说,使用体验还是不如用 WebStorm 直接加载 WSL Ubuntu 里的项目。
The text was updated successfully, but these errors were encountered: