前幾天微軟收購npm的新聞對於軟粉來收很是振奮。微軟收購npm很可能是為了加強Github Packages。目前Github,Typescript,VSCode,npm這些開源社區的重磅工具全部都在微軟旗下,顯示出了微軟對開源的態度,微軟已經不是以前那個封閉的微軟。Github推出Github P ...
前幾天微軟收購npm的新聞對於軟粉來收很是振奮。微軟收購npm很可能是為了加強Github Packages。目前Github,Typescript,VSCode,npm這些開源社區的重磅工具全部都在微軟旗下,顯示出了微軟對開源的態度,微軟已經不是以前那個封閉的微軟。Github推出Github Packages功能有一段時間了,一直沒使用過,今天有空打算折騰一下,體驗一下。
什麼是Github Packages
Github Packages是一個包承載服務,它完全跟Github集成。Github Packages使你的源碼和包在同一個地方進行統一的管理,使你可以集中的在Github上開發跟發佈。你可以發佈公共包(public packages)跟所有人分享,也可以發佈私有包(private packages)提供給個人或者組織使用。以上是對官方文檔的簡單翻譯。說簡單點就是以前你代碼是在Github,但是包可能是在npm,maven或者nuget上,現在你在Github上傳代碼後還可以直接把包也上傳到Github,方便統一管理,發佈。
在Github Packages上發佈包
下麵讓我們開始嘗試使用Github Packages發佈一個包吧。
在Github上新建一個倉庫HiGithubPackage
新建一個公共的倉庫命名HiGithubPackage
在Github上申請Access Token
在Github上申請一個新的Access Token。這個Token是用來上傳Package的憑證,後面需要配置。登錄Github後點擊個人頭像-Settings-Developer settings-Personal access tokens-Generate new token,然後勾選packages的許可權後點Generate token按鈕生成token。複製好這個token,不要丟了,因為你關閉這個頁面後,後面就再也找不回這個token了。
新建一個.net Core項目HiGithubPackage
使用Visual studio新建一個core標準庫項目。新建一個類,這個類里只有一個靜態方法Hi,調用的話會輸出一行Hi GithubPackage ~。我打算把這個庫上傳到Github Packages上去。
public class GithubPackage
{
public static void Hi ()
{
Console.WriteLine("Hi GithubPackage ~");
}
}
順手把代碼也push到github上去吧。
git push -u origin master
新建一個nuget.config文件
在項目文件夾下新建一個nuget.config文件,並且配置它。
OWNER填寫你Github的用戶名
UserName填寫你Github的用戶名
Token填寫上面申請的access token
以下是我的配置
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="github" value="https://nuget.pkg.github.com/kklldog/index.json" />
</packageSources>
<packageSourceCredentials>
<github>
<add key="Username" value="kklldog" />
<add key="ClearTextPassword" value="xxx" />
</github>
</packageSourceCredentials>
</configuration>
修改包信息並打包
在Visual studio上右鍵項目,選擇編輯項目文件。我們在csproj文件下編輯包信息。其中包含包的id,版本,授權等,比較簡單一看就明白了。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>HiGithubPackage</PackageId>
<Version>1.0.0</Version>
<Authors>minjie.zhou</Authors>
<Description>Test upload to github packages</Description>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryUrl>https://github.com/kklldog/HiGithubPackage</RepositoryUrl>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
</Project>
修改完後ctrl-b一下進行一次編譯。編譯完後在bin\debug下會生成一個.nupkg的包文件。
上傳包到Github packages
使用dotnet cli進行上傳
dotnet nuget push "bin/debug/HiGithubPackage1.0.0.nupkg" --source "github"
這裡可能要多試幾次,有的時候會提示401的錯誤。
上傳成功後回到Github網站刷新下看看HiGithubPackage倉庫。可以看到我們的包已經出現在上面。
新建一個.net Core控制台項目HiGithubPackageTest
新建另外一個core項目,這個項目要引用我們上傳成功的包並使用它。
使用dotnet cli來安裝這個包
dotnet add HiGithubPackageTest package HiGithubPackage --version 1.0.0
這裡也要多試幾次,同樣會出現401的問題。最後我掛上FQ工具才安裝成功。
修改Program類來使用這個包。
class Program
{
static void Main(string[] args)
{
HiGithubPackage.GithubPackage.Hi();
Console.ReadLine();
}
}
運行一下成功的輸入了“Hi GithubPackage ~”,說明成功的引用了HiGithubPackage這個包。
一些小問題
通過以上一些了操作我們演示瞭如果上傳一個包到Github Packages服務。演示瞭如果下載一個包到項目並使用它。總體體驗其實一般般,個人覺得有幾個小問題:
- 上傳的包並不會出現在nuget.org官方源裡面。不出現在官方源裡面的話其他項目要使用這個包就會相當麻煩。畢竟大家都喜歡使用nuget管理程式來安裝包,使用cli的話會比較麻煩。
- 不知道是不是牆的問題,上傳包跟安裝包都碰到了比較嚴重的網路問題,如果沒有FQ工具的話會很麻煩,當然這不是Github的鍋。