TL; DR
在 PowerShell(管理员)中执行
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install microsoft-windows-terminal
**还想看更多碎碎念?↓**
引言
长期以来咱的开发环境一直在使用 *nix / Linux 系统,比如 macOS 或者 Ubuntu,没什么太多的原因,其实就是「懒」。
*nix / Linux 上有着一套优秀的包管理系统及其社区,绝大部分软件的安装你只需要一行命令。据咱所知,很多人坚持用 arch Linux 的原因就是 AUR。
在下文中以 macOS 上的包管理举例子:
假如你想安装一套 Nginx + Mariadb + Python3 的开发环境,你只需要一行命令:
brew install nginx mariadb python3
便可以省去在传统 Windows 上的
- 去各个官网下载编译版并安装
- 自行配置各个软件
- 配置 PATH 变量
等等等等一系列不友善的要花费数小时的过程。
如果你自行编译安装过一些软件的话,这个过程就更加繁琐复杂了。
人生苦短,多给自己节约点时间做点有意义的事。
什么是包管理?
你可以做出这样简单的理解:
对用户而言,包管理就像是电脑版的 App Store,但是这个应用商店足够自由且开放。
同时,包管理就像是一本软件安装的参考答案,几乎所有常用的命令行软件都可以通过包管理来安装,前人帮你写好了答案,你照着抄就可以。
一个软件安装要经过许多的步骤,我们用简单的命令行软件 curl 来举例:
- 去 curl 的官网下载最新版本的源代码
- 设置一些参数,检查依赖环境
- 利用 Makefile 进行安装
而包管理就是帮你进行这个复杂的过程的,对你而言,你只需要执行一行命令
brew install curl
而 HomeBrew 在背后帮你执行的命令你可以在 homebrew-core 这个 github 仓库中看到。
https://github.com/Homebrew/homebrew-core/blob/master/Formula/curl.rb
我们来看一下这段 Ruby 代码
class Curl < Formula
desc "Get a file from an HTTP, HTTPS or FTP server"
homepage "https://curl.haxx.se/"
#App 的简介
url "https://curl.haxx.se/download/curl-7.68.0.tar.bz2"
sha256 "207f54917dd6a2dc733065ccf18d61bb5bebeaceb5df49cd9445483e8623eeb9"
#应该去哪里下载源代码
bottle do
cellar :any
sha256 "2695c7d41931198debef3736002422c036b36a547e4d6d3098184e90b729f571" => :catalina
......
end
#预编译版 bottle 的 sha256
head do
url "https://github.com/curl/curl.git"
depends_on "autoconf" => :build
depends_on "automake" => :build
depends_on "libtool" => :build
end
keg_only :provided_by_macos
depends_on "pkg-config" => :build
uses_from_macos "openssl"
#依赖环境
def install
system "./buildconf" if build.head?
args = %W[
--disable-debug
--disable-dependency-tracking
......
]
#编译过程的参数
system "./configure", *args
system "make", "install"
system "make", "install", "-C", "scripts"
libexec.install "lib/mk-ca-bundle.pl"
end
#编译命令
test do
filename = (testpath/"test.tar.gz")
......
end
end
这实际上是一种「前人栽树,后人乘凉」的行为,社区讨论出安装 App 的最佳方式,而包管理帮你执行这一大串繁琐的过程。
但不仅仅在于命令行,很多的 GUI 软件也都可以通过 homebrew cask 来进行安装。
比如你可以通过
brew cask install atom chrome
等来安装很多 App。
并且通过包管理安装的 App 都可以由包管理来负责更新,你只需要一行
brew cask upgrade
便可以更新完所有通过 brew cask 安装的 App,是不是有应用商店内味儿了。
回到 Windows 上
Windows 上的各种「包管理」不温不火的原因可能是因为 Windows 上「包」的概念并不怎么明确。
在 Linux 下,配置皆文件,打开 conf 文件便可以修改你想要的配置和参数;Windows 下则采用了「注册表」的概念,而 Win 的理念可能并不想让用户接触到这个「潘多拉魔盒」,每次对注册表的编辑和修改都是令人头大的一件事情。
尽管有 MingW 这类软件可以帮你把 GUN 生态链搬到 Windows 上,可是安装和软件仍然是一件麻烦事。
Windows 自带的 cmd 和 PowerShell 的 UI 总是仿佛回到了 1998,没有 zsh 或者 fish 这样的优秀的 shell,「提笔忘参数」这种事情时有发生。
基本上咱在 Windows 上做的最多的事情可能就是游戏了,毕竟不做客户端软件开发也就很少用 VS,但是不得不说 VSCode 是真的很香。
微软这几年也开始拥抱开源社区,从 Windows Subsystem for Linux 就能看出来。
但不得不说微软自己的那个终端还是太复古了,使用体验不尽人意,然后微软推出了全新的终端:Windows Terminal
在 Github 官方介绍中,除了手动安装以外,官方还钦定了一种第三方安装方式:Chocolatey
安装方式也很令人满意:
choco install microsoft-windows-terminal
关于 Chocolatey
Chocolatey 是 Windows 上的一个第三方「包管理」软件,使用 Apache 协议,同时提供商业版本(个人 / 团队可以直接使用社区版)
用他们自己的说法:
The licensing is very business friendly
安装 Chocolatey 也很简单,在管理员 PowerShell 中执行:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
随后你便可以通过 Choco 安装包括 Windows Terminal 在内的很多软件了
比如你可以这样:
choco install adb android-sdk android-ndk jdk8 git python3 googlechrome notepadplusplus
是不是省下了很多麻烦的配置过程,将来的统一升级管理也十分方便。
Chocolatey 的社区包已经十分完善了,你可以去他们的官网页面查找你想要的软件。
Windows Terminal
为什么要用 Windows Terminal 在前文已经提过了:替换掉原本的难用的终端。
简单的体验下来没发现什么太多问题,起码比默认的中易宋体好看多了。
可能是咱不太习惯 PowerShell 的语法和一大坨的报错信息吧,最终使用时间最多的也就是配合 WSL 使用了,不过安装过程中发现了个好用的包管理还蛮开心的。
用 Windows 10 自带的「包管理器」MS Store 装不是更方便嘛
https://www.microsoft.com/en-us/p/windows-terminal-preview/9n0dx20hk701
嘛,道理上这篇文章就是想介绍下包管理的。而且好多其他软件没法用 MS Store 安装就很麻烦(再加上 MS Store 在国内三天两头打不开