利用WSL在Windows下获得更好的开发体验

为什么Windows不适合作为开发使用?

对于我个人的前端开发体验而言,主要在这几个方面:

  • 利用Node.js实现一些自动化功能,代码内经常混入一些Windows无法运行的bash命令;
  • Windows下一般不只有开发环境,还会安装一些其他的软件、游戏等等,相互影响;
  • 部分库没有做cross-env兼容,在Windows下执行会有意料之外的bug;
  • Windows的目录结构在实际使用时会有意料之外的问题;

因此,WSL是在Windows下进行开发更好的选择。

截止本文编写时,我仍不建议使用WSL2的版本,会给开发带来一些不必要的困扰,稳定后再体验。

开启WSL

有关于如何在Windows下开启WSL功能,很多文章在一年前都进行了说明。在当前版本号1909下,只需要注意以下几点:

  1. 可以正常使用Microsoft Store(也支持利用zip包安装,具体详见官方文档);
  2. 开启“适用于Linux的Windows子系统”,设置路径在:控制面板\程序\程序和功能 -> 左侧“启用或关闭Windows功能”,这一步骤需要进行重启使得更改生效;

安装

安装比较简单,利用Microsoft Store搜索“Linux”,选择你喜欢的版本进行安装即可。

安装会默认安装至C盘,如果你的C盘容量非常“宝贵”,建议使用LxRunOffline工具进行迁移,这个工具还可以进行管理等等功能,有兴趣的可以研究一下。我们下载它的Release并在Windows下解压到合适的目录下,利用PowerShell环境运行exe即可执行相关命令。

等待下载完成后启动,需要等待一些时间,系统会自动对你选择的Linux发行版进行配置和初始化,输入你的用户名密码即可开始使用。

配置

配置上正常先将系统自带的各种包更新升级sudo apt update && sudo apt upgrade

ProxyChains

由于WSL使用的是父主机(即Windows系统)的网络环境,因此在WSL环境下,部分软件安装配置时,会存在无法访问的情况(例如Github Release的文件分发地址……),强烈建议先配置ProxyChains-NG,可以选择手工下载源码make安装,也可以利用包管理器(目前包管理器版本较低,为3.x版本,仓库目前已经到了4.x版本,如果有能力建议使用源码安装,我使用的Ubuntu-18.04版本需要安装make与gcc包),sudo apt install proxychains进行安装,这里不赘述。

安装好后在/etc目录下编辑(如果是源码安装,这里是创建)proxychains.conf文件,在文件内写入配置信息:

[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 127.0.0.1 1080

在配置完成后,运行命令前带有proxychains即可通过代理,例如如下命令即可测试是否成功应用代理:

proxychains curl myip.ipip.net

如果显示代理,即配置成功。

Node.js & NPM

这里其实没什么需要详细说明的,和我们在服务器环境配置Node.js同理。

在官网的角落可以找到一个相对隐蔽的Node源地址,配置后可以直接通过包管理器快捷安装Node,相比于二进制与源码安装更为简单,其仓库地址

这里我遇到了Bug,在配置WSL环境前,我没有移除Windows下的Node环境,在完成了上述安装步骤后,npm -v提示“Unable to correct problems, you have held broken packages.”,看到对应报错地址指向了/mnt/c下的node目录时,明白了npm命令是调用了Windows环境下的npm,因此,卸载Windows下的nvm(请通过“控制面板”内的软件功能进行卸载)与Node.js后,移除WSL内已安装的Node.js并重新安装,一切正常工作,完美。

Oh my Zsh

前文提到过,curl和wget目前都可以通过proxychains进行代理,这里其实没有太大的困难,但是,考虑到可能的DNS污染相关,这里我把官方的curl地址修改为sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"并使用代理,安装成功。

如果提示SSL相关问题,wget下可以通过wget --no-check-certificate临时关闭SSL检查。

这里我还遇到了一个无法连接的问题,我在安装的时候提示我raw.githubusercontent.com指向了0.0.0.0,查找相关issue,执行以下命令查询是否有相关的软件控制网络或代理,检查发现我的“火绒”影响了,临时退出即可。

powershell.exe "Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntivirusProduct" | grep displayName

SSH

配置WSL的git环境需要对应的SSH-key,按照正常的方法,可以生成,但是无法复制出来,WSL具有可以直接执行Windows环境exe程序的特性,因此可以通过cat ~/.ssh/id_rsa | clip.exe直接复制出来。

然而生成的key无法被Github识别,提示“key is invalid”,查阅得到这个结果,虽然并不是完全一致的问题,但是提供了思路,将SSH生成的命令修改,删除指定长度“4096”的设置(-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。)

ssh-keygen -t rsa -C "[email protected]"

配置到Github,成功。

卸载与导出

如果之后不再需要WSL环境,可以通过如下命令进行卸载:

wslconfig /unregister <wslconfig /list得到的对应名称>

额外的,建议将对应的UWP程序同时右键卸载进行彻底移除。

如果希望备份迁移,可以使用前文提到过的LxRunOffline工具进行处理,可以参考项目的Readme进行操作。

目录:

1.为什么Windows不适合作为开发使用?
2.开启WSL
3.安装
4.配置
4.1ProxyChains
4.2Node.js & NPM
4.3Oh my Zsh
4.4SSH
5.卸载与导出