首页 > 解决方案 > 将包控制与离线存储库一起使用

问题描述

package control在离线环境中使用 sublime的工作流程是什么?是否可以设置自己的存储库,用于列出和下载专用存储库中可用的包?

我知道您可以将 git 路径添加到包中,但我正在考虑更无缝的集成,例如列出离线存储库中可用的包。

标签: sublimetext3

解决方案


为了解释如何设置离线站点(例如您想要的站点),让我们首先介绍当您通过在命令面板中Package Control选择来告诉您要安装软件包时(逻辑上)发生的事件序列:Package Control: Install Package

  1. 联系文件设置中channel列出的每个包,下载内容,获取包列表channelsPackage Control.sublime-settingsrepositories

  2. repository这返回的每一个都被下载,以提供该存储库中可用包的完整列表。

  3. 类似地下载文件repositories密钥中设置的存储库列表。Package Control.sublime-settings

  4. 这些请求返回的所有不同包存储库的内容都组合到一个列表中,并呈现给您以供您选择要安装的包。

  5. 选择的包的细节用于适当地下载和安装包。

Package Control附带channels设置设置为包含单个通道条目的列表,该条目表示默认包控制通道的内容。

"channels":
[
    "https://packagecontrol.io/channel_v3.json"
],

为了设置离线包存储库,您需要创建自己的自定义channelrepository文件并将它们托管在 Web 服务器上,每个需要访问私有存储库的人都可以访问该服务器以及您正在使用的所有包提供。


重要提示: Web服务器必须通过https提供文件,否则Package Control出于安全原因将拒绝加载它们。


控制文档有一个页面讨论了通道和存储库,包括一个示例通道文件和一个示例存储库文件,以向您展示结构和可用密钥。在继续进行时,您应该参考示例文件以查看可用的内容。

您需要创建的channelrepository文件都是 JSON 格式,并将提供可用包的所有详细信息,其中包括所述包的版本、可用位置、版本要求等。

还应该提到的是,默认 Package Control 通道中的所有包的大部分都存储在 GitHub 或 BitBucket 存储库中,并且在安装时 Package Control 将从这些站点下载最新版本进行安装。

为了知道包何时更新,packagecontrol.io(托管默认频道)有一个爬虫,它每小时(ish)访问它包含的所有包的存储库页面,以检测包的新版本。

在创建一个私有存储库(例如您要创建的存储库)时,您可能无法访问 GitHub 或 BitBucket,因此您有责任sublime-package为您频道中的包提供适当的文件,并及时了解新的软件包的版本和适当的更新。

例如,这是一个最小的channel文件,我们假设它可以在网络上的 URL 处获得https://example.com/channel.json

{
    "schema_version": "3.0.0",

    "repositories": [
        "https://example.com/packages.json"
    ]
}

为了让 Package Control 使用此频道,您需要修改 中的channels设置Package Control.sublime-settings,删除默认频道(您可能无法访问)并将其替换为您自己的频道 URL。这是一个列表,允许您根据需要创建任意数量的频道。

"channels":
[
    "https://example.com/channel.json"
],

这一步很重要;如果列表中没有至少一个频道,Package Control 将不会安装任何东西,并会弹出一个警告对话框,告诉您没有要安装的包。

当 Package Control 下载频道时,它将尝试获取repository它包含的频道,以确定当前可用的包及其版本。

如上所述,通道文件将在 URL 中查找文件,该文件https://example.com/packages.json可能如下所示:

{
    "schema_version": "3.0.0",

    "packages": [
        {
            "name": "PackageTheFirst",
            "description": "A package to do some things",
            "homepage": "https://somewebpage.com/",
            "author": "developer name",
            "releases": [
                {
                    "version": "1.0.0",
                    "url": "https://example.com/sublime3/PackageTheFirst.sublime-package",
                    "date": "2017-01-25 11:33:25",
                    "sublime_text": ">=3126",
                    "platforms": ["*"]
                }
            ]
        },
        {
            "name": "OtherPackage",
            "description": "A package for other things",
            "homepage": "https://someotherwebpage.com/",
            "author": "another author",
            "releases": [
                {
                    "version": "1.0.3",
                    "url": "https://example.com/sublime3/CommentGlory.sublime-package",
                    "date": "2018-04-11 16:32:27",
                    "sublime_text": ">=3176",
                    "platforms": ["windows"]
                }
            ]
        }
    ]
}

这里列出了一个名为PackageTheFirstversion的包1.0.0,需要 Sublime Text build 3126 或更高版本,可以在 URL 中找到https://example.com/sublime3/PackageTheFirst.sublime-package。还有另一个名为 的包OtherPackage,它是一个仅限 Windows 的包,需要 Sublime build 3176 或更高版本才能安装。

有了这些文件并适当地更改了您的配置,包控制将列出这些包以供用户安装。如果您更新存储库文件中的版本(并创建一个适当的新sublime-package文件),Package Control 将按照通常的方式通知和更新包。

这没有解释的是,您将从哪里获得要在自定义频道中引用的软件包的文件和相关频道条目。

如果您要从默认频道提供第三方软件包,您可以从默认频道条目中收集一些您需要的信息。但是请注意,大多数频道条目都包含指向存储包的 GitHub 或 BitBucket 存储库的链接,并且包的大部分元数据(作者、版本等)都是从那里收集的,因此您需要手动输入该信息。

在您提供自己的自定义包的情况下,应该更容易确定频道条目中的信息。

最后一点,根据您设置的存储库和包的数量,通道文件允许您通过包含存储在引用存储库中的所有包的缓存副本来优化它,这允许包控制获取只需一个请求即可获得完整的软件包列表及其信息。

在上面链接的示例通道文件中有更多信息。


推荐阅读