先说结论我们的最终目标是在Windows上搭建一个非常接近Linux体验的开发环境。让IDE直接运行在Windows系统上,所有服务都部署在WSL上。这样在配置环境和编译的过程中,使用的是真正的Linux,所有的命令行都使用了Shell,而且vim和git等功能都是开箱即用的,不需要再使用dos命令。而且,Windows强大的生态解除了Linux的后顾之忧。1需求分析Linux与Windows之争:在SpringBoot和Angular的学习过程中,Linux有着很大的优势。但Linux的致命伤是软件生态:QQ、Tim需要用Wine实现,Office需要寻找替代品,钉钉、OneNote等软件直接无解……而且,直接使用Windows系统配置环境,比较麻烦,不仅要配置复杂的环境变量,还要忍受不熟悉的dos命令(我只熟悉Shell)。目前现有的解决方案是在Windows上搭建开发环境,但是需要放弃UnixShell在Windows下安装Linux虚拟机,在Linux下安装Windows虚拟机才能使用MacOS(推荐,既保留了特性Unix,还解决了生态问题,唯一的问题就是烧钱)而我们今天要讨论的是基于Windows10的Linux子系统(WSL)。子系统是Windows10的新功能,不是虚拟机,而是直接在Windows中运行Linux内核,磁盘共享,端口共享,可以直接使用Shell操作Windows文件,也可以直接访问端口在子系统中。Linux系统的大部分功能都可以通过WSL实现,性能几乎没有损失。(注:WSL目前支持不完整的Docker。)我们要做的是借鉴前后端分离的思想,将Windows作为Linux的UI,Windows只充当编辑器的角色。这就是为什么有一个笑话:Windows是最好的Linux发行版。2、安装WSL在控制面板中启用Linux子系统:在开发者选项中启用开发模式:在MicrosoftStore中安装Linux发行版:安装完成后在CMD中输入://完成子系统ubuntu的安装//用户名(自己替换)user//密码(自己替换)123456然后出现久违的Unix提示,WSL安装完成:3.WSL中的配置环境有了Linux子系统后,我们的各种环境配置都可以使用Linux的方式——即Shell,一键完成,无需再次点击!接下来以《Spring + Angular 入门实例教程》为例,目标配置环境。WSL中需要安装:Node.JSHttp-serverJDKMAVENGitMysqlWindows需要安装:WebStormIDEANavicat第一步:改源(Linux用户基本操作,阿里源或者清华源都可以改)。更改源后,在子系统的终端中进行以下操作。NodeJs//下载安装器curl-sLhttps://deb.nodesource.com/setup_10.x|sudo-Ebash-//执行安装程序sudoapt-getinstall-ynodejs然后出现如下情况:说明:WSL体积小,标准Ubuntu中的很多组件都没有安装在WSL中。//安装Pythonsudoapt-getinstallpython-minimal//执行安装器sudoapt-getinstall-ynodejs//检查版本node-vnpm-vhttp-server//安装npminstallhttp-server-g--registry=https://registry.npm.taobao.org对了,node启动时,弹出如下画面:WSL中的每个进程在Windows中都有对应的进程,说明一个结论:WSL是运行在底层的,不是虚拟机。JDK最酷的一步来了:一想到在Windows下配置JDK就头疼。现在,一个命令就可以做到。//安装JDKsudoaptinstallopenjdk-8-jdkMAVEN//安装mavensudoapt-getinstallmavenGit初始化信息//WSL内置gitgitconfig--globaluser.namexxxxxgitconfig--globaluser.emailxxxxx@live.comgitconfig--globalcredential.helperstoreMysql一开始尝试在WSL上安装Dockers,但无法启动。查了一下,发现WSL对Docker的支持不完善,就放弃了。(需要Docker的用户只能考虑在Windows上安装,但是Windows版的docker需要虚拟化,需要开启HyperV,很麻烦。。。)//安装sudoaptinstallmysql-server-5.7//startsudoservicemysqlstart//登录,密码为空sudomysql-uroot-p在Windows下安装Navicat,直接连接即可:WebStorm&&IDEA&&Windows下安装Navicat,很简单,废话不多说。为了互通,我们尝试直接在WSL中的Windows文件夹中克隆项目。克隆后,可以直接在文件管理器中看到。IDE可以直接打开工程配置IDE。对于WSL关联的终端,填写Shell路径:"cmd.exe"/k"wsl.exe"成功显示终端:切换到WSL的NodeFile->Settings->Languages&Frameworks->Node.jsandnpm并尝试运行ngserve成功:由于端口共享,可以直接用Windows浏览器访问:IDEA启动后端时,出现mysqljava.sql.SQLException:Theservertimezonevalue'XXXXXX'isunrecognizedorrepresented.这是由于数据库和系统的时区不同造成的。方法一:在JDBC配置文件的url中添加://UseGMTserverTimezone=GMT//或使用gmt+8时区serverTimezone=GMT%2B8方法二,可以避免更改项目代码,让Windows使用UTC时间回车在管理员模式的CMD中:regaddHKLM\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation/vRealTimeIsUniversal/tREG\_DWORD/d1后台启动成功:综上所述,此方案适用于熟悉Linux开发环境,但由于某些原因(软件生态、计算机兼容性等),不得不在Windows上开发的Users。这样就可以使用原始的UnixShell在Windows环境下完成所有的命令行操作,快速配置环境。并且由于WSL直接在Windows中运行,几乎没有性能损耗,轻负载下内存占用极低。但是由于目前的WSL还不完善,很多复杂的操作暂时无法实现,比如Dockers,涉及底层的开发。本文旨在探讨,如果您发现本方案的不足或更好的方案,欢迎补充。参考资料(扩展,比文字更重要)ubuntu16.04和18.04替换国内源启用Windows10的Linux子系统并安装图形界面WSL在Ubuntu18.04中安装MySQL5.7WSL搭建Java开发环境在中安装DockerIDEA-WebstormWSL使用WSL作为DefaultTerminal并配置nodejs解决mysqljava.sql.SQLException:Theservertimezonevalue'XXXXXX'isunrecognizedorrepresentsWSLstartsssh,nginx,mysql等服务
