在 Windows 上像专业人士一样进行开发
财政支持
所以在我看来,很多人似乎并不重视 Windows 的开发功能。他们似乎对它的功能、工具的可用性存在很多误解,并且对 Windows 的真正选择缺乏了解。
希望本指南能帮助大家认识到,Windows 和其他任何编程语言一样,都是一个可行的选择,而不仅仅是 C#。此外,还有一些关于 Windows 使用的通用技巧,并非纯粹在开发中有用。
本指南基于我自己的工作习惯和原则。例如,如果你正在开发需要数据库的项目,我假设你无论如何都不想在本地运行它,因为各种服务很快就会毒害你的系统。通常情况下,你应该尝试以某种方式在虚拟机或容器上运行这些项目。
在托管虚拟机或容器中运行更复杂的开发环境通常也是一个好主意,以确保重置环境或让新团队成员加入不需要复杂的、从未完全更新的操作系统特定指南。
目录
- Windows 10 的隐私等问题
- 安全
- 终端仿真器
- 包管理器
- 虚拟化
- GNU 工具链、CygWin 和 WSL
- 苹果打造
- 脚本、别名和自动运行
- 路径
- SSH 密钥 + Pageant
- 窗口管理
- 截图
- 表情符号和 UTF-8 特殊字符
- 字体
- Git、Diff 和其他类似工具
- 自动重启怎么样?
- 权限
- 上述大部分内容的自动化
- 总结
(嘿,dev.to 的朋友们,想让这些变得更容易些吗?)
Windows 10 的隐私等问题
首先谈一下这个话题是公平的。
有些人似乎仍然有这些顾虑。我不能说现在运行任何大公司的操作系统都是安全的,这些公司确实不值得任何人信任,但微软似乎已经采取了措施,很好地缓解了这些问题,并且有一些非官方工具可以进一步提供帮助。
首先,设置 Windows 计算机或用户帐户时,切勿使用 Microsoft 帐户,而应使用离线帐户。这会禁用一些几乎无用的功能,例如同步 Edge 设置。此外,Microsoft Store 可能会时不时地提醒你切换帐户使用 Microsoft 帐户,但点击“否”并不会太麻烦。当然,如果你一开始没有这样做,你也可以转换帐户,或者至少创建一个新帐户。
其次,同样,在安装计算机时,请确保对所有跟踪问题都回答“否”,对广告回答“否”,对广泛的指标回答“否”,等等 - 这确实可以禁用人们所担心的很多事情。
第三,安装DoNotSpy10,然后调整你不满意的剩余设置。效果很好。
有了这些,我对 Windows PC 的信任度至少会和谷歌、苹果或 Canonical(Ubuntu 的幕后推手,以与亚马逊进行不正当交易而闻名)等其他公司的产品一样高。一些 Linux、BSD 等发行版可能会更加注重隐私,但我能投入的精力以及我能容忍的系统缺陷都是有限的。
对于真正注重隐私的用户,我强烈推荐Pi-Hole。虽然设置起来有点麻烦,而且不太方便“随时随地”使用,但配置到你的网络中后,你可以屏蔽很多你不想要的追踪行为。看到它能从我的手机应用中屏蔽多少次追踪尝试,真是让人恼火。另外,我知道F-Secure FREEDOME VPN也提供阻止在线追踪的选项,其他 VPN 解决方案应该也提供类似的功能。
安全
安全确实是一个适用于所有系统的话题。MacOS 和 Linux 都可能感染病毒,而且无论你使用哪种操作系统,都可能在网上做一些蠢事。
默认情况下,Windows 是相当安全的,只要不运行.exe
电子邮件附件中的每个随机程序或恶意网站想要下载的程序,就没问题了。
唯一的例外是全盘加密,就此而言,我不知道还有什么比 BitLocker 更安全的解决方案,而且需要 Windows 专业版。虽然有 DiskCryptor 和其他类似的工具,但 Windows 更新破坏了引导扇区后,我不得不花费大量精力来修复它们。
如果您仍然担心,可以使用F-Secure SAFE或其他众多安全套件,获得更高级别的保护。顺便说一句,这类始终在线的主动安全工具在非 Windows 设备上并不普及,因此我很容易将它们归类为安全性较低的工具。
不要禁用用户帐户控制(权限对话框),不要自动单击 UAC 对话框中的“是”,不要在 Office 文档中启用来自随机来源的脚本内容,这样您就会非常安全。
哦,还有个小建议:无论你用什么操作系统,都要使用密码管理器。市面上有很多选择,有些功能比其他的更多(例如跨平台同步、与他人共享等等)。选择任何一款并使用它,你的互联网安全感就会比大多数使用其他操作系统的人都要好得多。
终端仿真器
因此,作为重要的第一步,让我们讨论一下终端仿真器。
没有人愿意查看或使用旧的命令提示符窗口(conhost.exe
不像cmd.exe
大多数人所想的那样)。
这个终端有很多问题,速度有点慢,没有 Tab 键,复制粘贴很麻烦,字体支持也有点差。不过别灰心!还有其他选择。
标签、分割视图、背景自定义、主题、大量自定义选项、地震风格向下滑动选项、配置文件、运行不同 shell 的选项等。
是的,ConEmu 可以实现所有这些功能。如果您只想找一个好的 Windows 终端仿真器,就用它吧。它安装简单,无需再寻找其他工具。
我觉得有个缺点需要提一下——它配置的默认提示有点烦人。你可能需要编辑%PROGRAMFILES%\ConEmu\ConEmu\CmdInit.cmd
(查看下面的权限部分了解操作方法)或在应用内调整设置来更改它。
微软自己也意识到他们的终端有点糟糕,会吓跑开发者。所以他们正在积极开发一个新的终端。它目前处于“早期预览版本”阶段,需要 Windows 10 18362.0 或更高版本。它看起来很有前景,但可能有一些原因导致你无法使用它或不想依赖它——到时候你就可以改用 ConEmu 了。
- 各种跨平台终端仿真器
现在我发现了几个,你已经有了基于 Node.js 的Hyper,它已经存在了一段时间,还有Bterm ,并且在https://terminalsare.sexy/#terminal-emulation-applications上有一个很长的列表- 选择一个,选择 5 个,尝试它们,看看你喜欢什么。
就我个人而言,我真的只喜欢Alacritty,我尝试过的其他应用程序感觉很慢或不稳定,例如,package.json
当你除了运行默认安装之外什么都不做时,Hyper 往往会随机地向你弹出一些关于一些解析错误或其他类似的无意义的窗口。
包管理器
现在市面上有一些这样的工具,例如Scoop和Chocolatey等等。我不能一本正经地说它们很优秀,因为它们往往会要求我启动一个单独的管理员 shell 来运行它们的命令,而不是在我运行命令时要求提升权限,但在这方面显然还是有希望的,目前也有一些选择。
我个人已经使用 Chocolatey 安装了很多东西,似乎没有任何问题。
虚拟化
如上所述,我依赖虚拟化技术将各种开发环境等与主机操作系统隔离开来,无论主机操作系统是什么。用各种项目相关的依赖项等来毒害你的主操作系统似乎是错误的,这些依赖项迟早会引发冲突和其他无法维护的情况。
由于我倾向于以与操作系统无关的方式工作,因此我所做的所有开发都需要使用跨平台工具。目前我知道的只有两种基础技术可以实现这一点:
如果你知道自己以后只会使用 Docker,没问题,直接按照他们推荐的 Windows 安装方法安装 Docker 就万事大吉了。Docker 依赖于 Hyper-V,如果你还没有安装 Hyper-V,安装程序会帮你启用它,这应该能解决你所有的问题。我自己从来没用过 Hyper-V,所以很有可能会遇到一些随机问题,比如游戏或其他东西的反作弊系统,但纯粹用于开发应该没问题。
对于其他情况,我强烈建议使用 VirtualBox。如果您也需要 Docker,可以通过Minikube(托管的Kubernetes环境,可通过 轻松访问 Docker minikube docker-env
)或老款且性能卓越的Windows 版 Docker Toolbox进行安装。Docker 实际上是由一群脱离现实的人运营的,因此他们让运行 Docker 的工作版本变得异常困难。
我特别不推荐使用 VMWare,因为它与您想要用来管理虚拟机的所有工具(例如Vagrant )配合得不太好,而且由于 VirtualBox 已经相当成熟,多年来它对我来说似乎并不值得花费那么多钱。
GNU 工具链、CygWin 和 WSL
一些 GNU 工具(以及一些其他典型的 *nix 工具)非常漂亮,虽然 Windows 确实带有一些类似的命令行工具,并且 Power Shell 可能能够以巧妙的方式执行许多类似的功能,但我必须承认,我对这两个选项都不是很满意。
我的做法是安装CygWin(我用的是x86_64
版本)并将其放在我的 上PATH
,然后使用 CygWin 安装工具来管理我可能想要安装的各种东西。既然nslookup
可以直接使用dig
,curl
为什么还要使用 呢? 因为它本身就很容易安装grep
,而且也ls
比dir
好得多。当工具捆绑了它们自己的软件包cygwin1.dll
或最终安装了 MSYS2 时,偶尔会出现一些问题,但这些问题通常很少见,而且相当容易解决。我想MSYS2也是 CygWin 的一个可行替代方案,尽管我个人对它没什么经验,但它使用pacman
类似于 Arch Linux 的包管理方式,这挺巧妙的。
然后,当我遇到一些罕见的情况,Windows 对某些我真正想用的工具的支持有点糟糕时,我往往能够在Windows Subsystem for Linux(真是个糟糕的名字)下很好地运行它,也就是 WSL。例如,我在 Windows 上运行Jekyll时遇到了一些问题,因为他们的开发人员显然不太在意他们的工具跨平台,但在 WSL 中运行它就没问题了。
使用 WSL 还有一个额外的好处,那就是我可以在 Windows 上运行 X Server,例如VcXsrv,甚至可以运行 GUI 实用程序。虽然仍然存在很多限制,例如,将 PulseAudio 路由到真实的 Windows 端目前似乎几乎不可能,但这里仍然有很多希望。
最重要的是,我有时真的很少在 VirtualBox 上启动 Fedora 来尝试一些即使在 WSL 下也无法运行的软件。
苹果打造
需要 MacOS 来构建你的 iOS/MacOS 应用程序吗?你觉得需要为此购买苹果硬件吗?
有各种构建自动化系统可以处理这个问题,还有像MacinCloud这样的软件可以帮助解决这个问题。
所以这也不会阻止你使用 Windows,这样的解决方案可能会引导你做出正确的跨平台开发选择 🙂
事实上,这种敌对的商业行为应该足以成为抵制苹果这样的公司的理由,但有时你必须面对现实,你也想向使用苹果硬件的人发布你的应用程序。
脚本、别名和自动运行
BASH 脚本在某些方面确实很简洁,而且人们知道如何轻松地设置自己喜欢的别名。然而,这并非唯一的选择。
无论如何,Windows Shell 支持许多基本操作,尤其是在您已安装 CygWin/MSYS2 的情况下。例如,我可以运行find . -name "*.sh" -exec git update-index --chmod=+x {} ;
或运行,cat README.md | grep https://
一切正常。环境变量?可以,只需使用set FOO=bar
。
批处理脚本已经存在很长一段时间了,虽然它对大多数人来说看起来并不熟悉,但它通常足以解决最常见的问题。
您可以编写.bat
或.cmd
脚本,也可以直接内联运行它们。例如,与其$(minikube docker-env)
执行该命令的输出,不如直接运行@FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
——如果您不习惯查看它,这看起来确实很奇特,但效果一样好。对于一些超出批处理脚本功能范围的事情,也可以选择运行 VBScript,但一如既往,我更倾向于跨平台解决方案。
您可以在 Windows 上运行 BASH 脚本,bash
通过 CygWin 安装(或使用 WSL),如果人们小心不要假设某些事情,它们往往会正常工作。
对于稍微复杂一点的事情,通常的选择是用 Python、Go 或 Rust 等语言编写脚本或工具。Ruby 也是一个广泛使用的语言,有些人使用得相当成功,但在我看来,分发用 Ruby 编写的工具有点麻烦。如果你正在进行 JavaScript 开发,你可以直接使用npm
脚本或各种 CLI 实用程序库。
那么别名怎么办?如果你想让你的ls
程序真正运行起来怎么办ls -haF --color=always
?嗯,有一个解决方案。
DOSKEY ls=ls -haF --color=always
如果你从未见过它,这又有点奇怪,但它确实有效。
想永久生效吗?ConEmu 和其他一些工具都能做到,但更通用的解决方案是使用自动运行。
创建一个脚本,例如 in %USERPROFILE%\init.cmd
,并将你的东西放进去。为了兼容性和方便起见,请在脚本前面加上一行代码,@echo off
用于禁用每次启动新shell时输出的命令。
这使得整个文件看起来更像这样:
@echo off
DOSKEY ls=ls -haF --color=always
现在,您需要打开regedit.exe
并浏览HKEY_CURRENT_USER\Software\Microsoft\Command Processor
并创建一个新的“可扩展字符串”值Autorun
(如果尚不存在),其中包含数据%USERPROFILE%\init.cmd
(或脚本所在的路径)。
如果您信任您的计算机在互联网上找到的随机脚本的安全性(有没有注意到人们经常只是卷曲并盲目地将其传送到 bash?🤢),您也可以将其保存为autorun.reg
并双击它。
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,\
4c,00,45,00,25,00,5c,00,69,00,6e,00,69,00,74,00,2e,00,63,00,6d,00,64,00,00,\
00
这将为您提供一个脚本,您可以轻松编辑该脚本并获取您的别名或其他常用命令,例如设置您的 Docker 环境或您想要的每个cmd.exe
正在运行的实例的任何内容,无论它位于哪个终端。
路径
有些人可能不知道这一点,但您PATH
也可以在 Windows 中管理 。您可以通过上面的脚本(set PATH=%PATH%;<new item>
注意;
和 不是:
分隔符)或通过“控制面板/开始”菜单中的选项来执行此操作。在打开的对话框View advanced system settings
中,在选项卡上,点击,找到 系统范围 或 特定于用户 ,然后点击。很简单,对吧?System Properties
Advanced
Environment Variables
Path
Edit...
将您的 CygWinbin
目录放在这里。
SSH 密钥 + Pageant
就我的经验而言,在 Windows 上生成 SSH 密钥有点麻烦,因为唯一像样的生成工具似乎是PuTTY套件中的 PuTTygen,但它默认使用自己的格式,你需要找到相应的选项才能获得与 OpenSSH 兼容的标准格式。不过,这完全可行。
Pageant 是 Windows 的 SSH 密钥代理。我还没找到其他真正好用的。
使用 PuTTy 安装程序获取 PuTTygen 和 Pageant。使用 PuTTygen 生成密钥,将.ppk
文件存储在文件系统的某个位置。如果希望始终加载这些文件,请将它们的快捷方式添加到%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
-folder 文件夹中。这样,当您登录时,它们就会加载到 Pageant 中。
如果您这样做,请确保您的磁盘已完全加密并具有合理的安全性,您不希望您的 SSH 密钥被轻易窃取。
窗口管理
对我来说,WinSplit Revolution 满足了我快速有效地组织窗口的需求,但它并不适合所有人,而且官方项目已经停止了。WinSplit Reloaded有一个 fork ,但似乎也没有积极开发。
但如果您需要的话,确实有很多选择,只需查看https://www.slant.co/topics/1249/~best-window-managers-for-windows#1即可查看其他一些选项的列表。
截图
我以前经常用https://getgreenshot.org/截屏,现在感觉还是应该用一下……不过这LWin+Shift+S
已经足够我快速复制部分屏幕内容粘贴到我的通讯工具里了,所以我几乎不需要其他工具。我也听说过很多关于LightShot 的好评,而且它确实有很多选择,这里再次列出一些选择:https://alternativeto.net/software/greenshot/?platform=windows
表情符号和 UTF-8 特殊字符
现在LWin+.
可以打开表情符号选择器,当您想要在输出、文档或其他内容中添加内容时,它非常方便。👍
不可否认,它在某些方面有点笨重(我倾向于点击Esc
来关闭它),但使用一段时间后感觉很自然。
字体
与所有其他系统一样,Windows 也支持字体,包括非常标准的 TrueType 字体。这些字体可以用来让你的 IDE 和终端仿真器更加清晰美观。我个人非常喜欢在我的终端和 IDE 中使用DejaVu 字体,因为它们外观简洁,所有字符都清晰可见。
安装非常简单,只需下载.zip
并打开Fonts
(在“设置”或“控制面板”中)。
看起来您也可以从 Microsoft Store 获得一些字体,但实际上那里提供的字体非常少。
Git、Diff 和其他类似工具
忘掉Git Bash for Windows
人们最终得到的那种糟糕的结果吧。它试图用 BASH 来运行 Git,却毒害了你的系统,最终却无法让它正常工作。
对于 CLI 使用,您可以使用https://git-scm.com/download/win上的官方二进制文件,或者再次通过 CygWin 安装。两者都应该可以工作,但可能需要进行一些配置才能使您的 diff 工具完美运行,并且可能需要设置一个GIT_SSH
环境变量以便plink.exe
(同样来自 PuTTY 软件包)使用 Pageant 作为您的 SSH 密钥(https://stackoverflow.com/a/10353937/3989287)。
但是,如果您可以使用 GUI 工具来更好地了解存储库的状态以及您即将提交的更改,为什么还要使用 CLI 呢?
我个人最喜欢的是GitKraken,但还有SourceTree和许多其他选项。
对于比较差异,我对WinMerge情有独钟。我从未见过比它更能满足我需求的比较/合并工具。现在又有很多选择。
自动重启怎么样?
是的,Windows 现在倾向于在必要时自动安装更新并重启。这是一种安全功能,如果你的编辑器设置了自动保存文件(尽管有些编辑器,比如 Sublime Text,现在即使不保存也能记住内容),并且你不经常在终端仿真器、隐身窗口或类似程序中运行非常重要的程序,那么通常不会造成太大的困扰。
避免此类问题最简单的方法是在 Windows 更新设置中设置“活动时间”——这将阻止您的更新在工作时间或类似时间进行。同样,如果您要参加一个重要的会议,也许可以完全暂停更新——在同一个 Windows 更新设置中,有一个新的“暂停更新 7 天”按钮。
对我个人而言,这在我工作的某些计算机上也是不够的,因为我可能会将这个帖子打开很长一段时间,而我不想回来时发现它已经消失了。
根据您的 Windows 版本,您还可以执行许多其他操作。
根据您的需要和情况,其中一些比其他更适用。
权限
但是讨厌的文件权限怎么办?我需要编辑文件的时候却无法编辑!?!
人们根本不了解 Windows 上的文件权限。他们禁用用户帐户控制 (UAC),或者安装一些Program Files
他们不了解的权限系统之外的东西或类似的东西来绕过它,而不是去学习它。
这就像建议您将所有东西都作为Linuxroot
运行或在 Linux 上运行chmod -R 0777 /
,或者禁用 SELinux - 疯了,但您 100% 知道有人这样做了,因为他们根本不愿意学习。
如果您需要运行某个命令,但又没有权限,那么以管理员身份运行命令提示符或其他应用程序就很容易了。在“开始”菜单中,通常可以右键单击任何项目,然后选择“以管理员身份运行”。可以将其理解为sudo
。
那么,如果您觉得您的用户应该有权访问这些文件,而您却没有,该怎么办?您可以编辑特定文件或文件夹的权限。
打开文件资源管理器,浏览到相关内容,右键单击条目并选择“属性”。
然后切换到“安全”选项卡,您可以查看为其设置的权限。想要更改它们,例如为自己添加权限?
单击Edit...
,然后例如Add...
当它要求“输入要选择的对象名称”时,您只需输入您的用户名,就我而言Lietu
,然后点击OK
。
在屏幕上选择自己后,您可以单击Allow
复选框Full control
,然后单击OK
对话框,然后您的问题就解决了。
这更类似于sudo chown <username> file
。
上述大部分内容的自动化
我编写了一个工具来自动执行其中的许多操作,Aperture Control - 免费(BSD 3 条款)工具和 PowerShell 脚本、批处理脚本和注册表补丁的集合,例如从 Chocolatey 和 Scoop 自动安装各种工具,或根据您的喜好配置 Windows 设置。
https://github.com/Lieturd/aperture-control-recipes上提供了一系列现成的配方,希望它们能够不断增加。
使用 Aperture Control,我还编写了一个模板,我认为它是一个良好的标准开发环境,也是开始使用 Aperture Control 的良好基础。希望它也能帮到你。模板可能有些主观,但我尽量将大多数个性化调整排除在外,只添加一些我认为普遍需要或更适合 Windows 开发的内容。
总结
多年来我一直是 *nix 的重度用户,但我真的发现找不到一款让我感到舒服的 *nix 桌面。
Windows 以前非常糟糕,如果你有过不好的体验,我理解。但自从 Windows 7 发布以来,微软在稳定性和可靠性方面确实有了显著的提升。你可能遇到的错误现在越来越容易在网上找到解决方案,而且通常情况下错误更少。我发现Twitter 上的 @MicrosoftHelps确实是我体验过的最佳客户支持之一。
Linux 存在太多驱动程序问题、错误和设计不佳的功能,例如拖放功能不起作用或具有用于鼠标选择和Ctrl+C
&的单独剪贴板Ctrl+V
。
MacOS 太低端了,连控制每个应用程序音量的基本功能都没有,甚至连调整任何设置都做不到。如果你不喜欢苹果的这种风格,那就太糟糕了。
确实没有其他足够成熟的桌面环境可以提供我所依赖的工具。
多年来,Windows 一直是一个良好的开发环境,并且随着微软积极修复问题、添加 WSL 等功能以及真正听取开发人员的反馈,Windows 变得越来越好。
除此之外,您还可以获得一台功能更强大的工作计算机,例如内置 4G 调制解调器、触摸屏等,而价格却只是 Mac 的一小部分。
我很想听听你们是否有任何其他建议,或者想提及 Windows 开发环境方面的问题 - 我们也许可以一起解决一些仍然存在的痛点。
我的下一个目标可能是尝试将上面提到的一些操作自动化——通过运行一个批处理脚本或 VBScript 文件来搭建一个良好的 Windows 环境。如果你有什么建议,我洗耳恭听 🙂
财政支持
感谢Cocreators和Lietu的支持,这项工作得以顺利完成。您可以通过Buy me a coffee来支持我们,帮助我们继续工作。
文章来源:https://dev.to/erebos-manannan/developing-like-a-pro-on-windows-4bbh