对于开发者来说,包管理工具是绕不开的话题,Ubuntu广受喜爱的原因之一也包含其方便的apt
包管理工具,MacOS上有homebrew
供开发者使用,这些包管理工具让开发环境的搭建非常顺滑。这里的包,是指广义的软件包,不仅包含常见的图形用户界面(GUI)软件,也包含命令行界面(CLI)软件和工具。
而开发者苦Windows命令行甚至powershell久矣,在早前的版本上,真的没有特别好用的工具。如今,终于也有了历经时间和用户考验的包管理器:Chocolatey,Scoop和Winget。Winget时间不久,由微软官方社区维护,但目前人气不如前两者。我只简单使用过chocolatey,没太多发言权,但scoop真的很好很强大,并且现在scoop的社区非常活跃,参与者众多,维护更新很快。我在GitHub上的第一次PR就提给了scoop。
scoop的官网上这样介绍自己:
A command-line installer for Windows
Quickstart scoop要求powershell 5.1+,所以如果没有安装powershell的话,还需要先安装powershell 。这里要注意powershell的版本区别,强烈建议安装powershell 7,最好用lts版本。此外,强烈安利Windows Terminal ,它已经是Windows 11默认终端程序,绝对值得拥有。
准备好后,打开powershell终端,运行:
1 2 > Set-ExecutionPolicy RemoteSigned -Scope CurrentUser > irm get.scoop.sh | iex
scoop默认安装到用户目录,这样可以避免权限问题。如果需要配置高级安装选项,请参考这里的安装方法 。
What does Scoop do 那么scoop可以做些什么呢?scoop从命令行安装你熟悉和喜爱的程序,非常丝滑,它的特点包括:
消除权限弹窗,安装过程超丝滑
隐藏GUI安装向导,一步到位
防止安装大量程序的PATH环境变量污染
避免安装和卸载程序的意外副作用
自动查找并安装依赖项
自动执行额外设置步骤以获得可用程序
在之前的Hexo安装和配置 中就曾讲过,从nodejs官网安装node.js各种坑,最后scoop一条命令搞定,那感觉真是太爽了。
1 2 3 4 5 6 7 8 9 10 PS C:\> scoop install nodejs Installing 'nodejs' (18.4 .0 ) [64 bit ] node-v18 .4.0 -win-x64 .7 z (17.3 MB) [===================================] 100 % Checking hash of node-v18 .4.0 -win-x64 .7 z ... ok. Extracting node-v18 .4.0 -win-x64 .7 z ... done. Linking ~\scoop\apps\nodejs\current => ~\scoop\apps\nodejs\18.4 .0 Persisting bin Persisting cache Running post_install script... 'nodejs' (18.4 .0 ) was installed successfully!
安装vs code:
1 2 3 4 5 6 7 8 9 10 11 12 13 PS C:\> scoop bucket add extras Checking repo... OK The extras bucket was added successfully. PS C:\> scoop install vscode Installing 'vscode' (1.68 .1 ) [64 bit ] dl.7 z (108.1 MB) [====================================================] 100 % Checking hash of dl.7 z ... ok. Extracting dl.7 z ... done. Linking ~\scoop\apps\vscode\current => ~\scoop\apps\vscode\1.68 .1 Creating shortcut for Visual Studio Code (code.exe) Persisting data Running post_install script... 'vscode' (1.68 .1 ) was installed successfully!
安装nerd-fonts字体:
1 2 3 4 5 6 7 8 9 10 11 PS C:\> scoop bucket add nerd-fonts Checking repo... OK The nerd-fonts bucket was added successfully. PS C:\> scoop install Cascadia-Code Installing 'Cascadia-Code' (2111.01 ) [64 bit ] CascadiaCode-2111 .01 .zip (23.7 MB) [===================================] 100 % Checking hash of CascadiaCode-2111 .01 .zip ... ok. Extracting CascadiaCode-2111 .01 .zip ... done. Running installer script... Linking ~\scoop\apps\Cascadia-Code \current => ~\scoop\apps\Cascadia-Code \2111.01 'Cascadia-Code' (2111.01 ) was installed successfully!
强烈建议安装这个字体,并在写代码或终端和编辑器中使用,看着真舒服。
Scoop 以可移植的方式下载和管理软件包,将它们整齐地隔离在用户目录scoop文件夹中。它不会在目录外安装文件,但允许将 Scoop 安装放置在像~\scoop
这样的你喜欢的任何位置。
1 2 3 4 5 6 7 8 9 10 11 12 > dir ~\scoop Directory: C:\Users\User\scoop Mode LastWriteTime Length Name ---- ------------- ------ ---- da--- 02 -04-2022 16 :06 apps d---- 30 -03-2022 13 :22 buckets d---- 02 -04-2022 16 :06 cache da--- 30 -03-2022 21 :32 persist da--- 02 -04-2022 16 :06 shims d---- 20 -02-2022 01 :22 workspace
对于终端应用程序,Scoop在文件夹中创建shims
,这是一种命令行快捷方式,可在PATH中访问。对于图形应用程序,Scoop在专用的“开始”菜单文件夹中创建程序快捷方式,称为“Scoop应用程序”。这样,软件包始终被完全卸载,您可以确定 PATH 和“开始”菜单中当前有哪些工具。shims
在~\scoop\shims
目录中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > scoop search python Results from local buckets... Name Version Source Binaries ---- ------- ------ -------- python 3.10 .5 main winpython 3.10 .4.0 main > scoop install python ... Creating shim for 'python.exe' . 'python' (3.10 .5 ) was installed successfully!> python -c "print('Hello from Python installed by Scoop!')" Hello from Python installed by Scoop!
Discovering Packages scoop包作为git仓库的一部分存在,被称为buckets
。内置的包搜索 命令可以用来搜索GitHub上的全部程序,GitHub上的所有buckets
列表见这里 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 > scoop search mongo Results from local buckets... Name Version Source Binaries ---- ------- ------ -------- mongodb-compass 1.32 .2 extras mongosh 1.5 .0 extras mongodb-database-tools 100.5 .3 main mongodb 5.3 .2 main > scoop search citra Results from other known buckets... (add them using 'scoop bucket add <name>' ) Name Source ---- ------ citra-canary games citra games
Creating Packages 我们还可以用scoop来创建和发布自己的程序,这样就可以非常方便的在团队内部创建和分享小工具。
1 2 3 4 5 6 7 8 9 10 > scoop create https://example.com/foobar/1.2 .3 /foobar-package .zip 1 ) foobar2 ) 1.2 .3 3 ) foobar-package .zipApp name: 1 1 ) foobar2 ) 1.2 .3 3 ) foobar-package .zipVersion: 2 Created 'C:\Users\User\Desktop\foobar.json' .
scoop中的程序用一个简单的json文件来维护,里边还可以嵌入powershell语句。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > scoop cat gifski { "version" : "1.6.4" , "description" : "GIF encoder based on libimagequant (pngquant)." , "homepage" : "https://gif.ski" , "license" : "AGPL-3.0-or-later" , "url" : "https://gif.ski/gifski-1.6.4.zip" , "hash" : "dc97c92c9685742c4cf3de59ae12bcfcfa6ee08d97dfea26ea88728a388440cb" , "pre_install" : "if (!(Test-Path '$dir \\config')) { New-Item '$dir \\config' }" , "bin" : "gifski.exe" , "checkver" : "For Windows.*?gifski-([\\d.]+)\\.zip" , "autoupdate" : { "url" : "https://gif.ski/gifski-$version .zip" } }
scoop的工作流是非常非常依赖GitHub的,国内访问偶尔抽风,如果大家在irm get.scoop.sh | iex
这一步安装出问题,可以换成下面的命令试一下:
1 irm https://gitee.com/happy-peter /InstallScoop/raw/master/install.ps1 | iex