VS Code 扩展之——私有扩展管理(Private Extension Manager)

为什么需要私有扩展的管理器?

和 Eclipse IDE的插件开发类似,VS Code(Visual Studio Code)也可以很容易的对VS Code编辑器进行创建和扩展新功能,这些扩展可以涵盖代码片段、主题、语言支持、调试器等多个方面。
VS Code的扩展的安装可以在官方市场 https://marketplace.visualstudio.com/ 中进行查找和安装。但是如果企业内部或是团队内部开发了一些扩展,团队成员如何安装这些扩展呢?
当然,自定义和开发的VS Code扩展可以提交到官方的扩展市场,也可以打包成.vsix的文件,成员在各自的机器上手动安装;如果是统一的开发机器,管理员也可以进行扩展的统一安装; 最后还有一招,就是通过私有扩展管理器(Private Extension Manager) 的扩展,发布在私有的扩展管理中。

对私有扩展的管理也就衍生了一些私有扩展管理器的出现,私有扩展管理器的作用包含以下方面:

  1. 集中管理
    • 私有扩展管理插件提供了一个中央仓库或平台,用于存储和管理所有内部开发的VS Code扩展。这有助于团队轻松地跟踪、管理和更新这些扩展,而无需依赖公共的VS Code扩展市场。
  2. 访问控制
    • 通过私有扩展管理插件,企业可以实施严格的访问控制策略,确保只有经过授权的用户或团队才能访问和安装这些私有扩展。这有助于保护企业的知识产权和敏感信息不被泄露。
  3. 自动化分发
    • 管理插件可以自动化地将新版本的扩展分发给团队成员。当扩展更新时,团队成员可以立即获得通知,并一键安装最新版本,从而提高开发效率和团队协作效率。
  4. 内部依赖管理
    • 私有扩展可能依赖于其他内部开发的库、框架或工具。私有扩展管理插件可以帮助管理这些依赖项,确保它们与扩展的版本兼容,并减少版本冲突的可能性。
  5. 简化部署流程
    • 对于需要在新环境(如新开发机、持续集成/持续部署(CI/CD)环境)中部署VS Code扩展的团队来说,私有扩展管理插件可以大大简化部署流程。管理员可以预先配置好所有必要的扩展和设置,并在需要时一键部署到目标环境。
  6. 增强安全性
    • 由于私有扩展通常包含企业特有的代码和配置,因此它们比公共扩展更容易成为攻击目标。私有扩展管理插件可以通过提供安全的存储、分发和更新机制来降低这种风险。
  7. 促进团队协作
    • 私有扩展管理插件还可以作为团队协作的平台。团队成员可以共享扩展的开发经验、最佳实践和反馈,从而共同推动扩展的改进和优化。
  8. 跟踪和分析
    • 一些高级的私有扩展管理插件还提供了跟踪和分析功能,帮助团队了解哪些扩展最受欢迎、哪些扩展需要更新或重构等。这些信息对于优化扩展库和提高开发效率非常有用。

官方扩展市场的私有扩展管理器( Private Extension Manager)

在扩展官方市场,使用关键字Private Extension Manager找出的扩展不多,大概可以用的有5-6个,而且基本上没有一个一直在更新维护的,有好几个都是直接以 “Private Extension Manager”来命名的。
在这里插入图片描述

这里主要推荐的是名为“Private Extension Manager”的扩展,由Garmin 公司开发。
Garmin 创立于 1989 年,由高民环博士 (Dr. Min Kao) 与 Gary Burrell 共同创立。高民环博士与 Gary Burrell 曾经是一起共事,两人分别专精于 航天科技产业、GPS、导航与航空航海电子相关领域。共事时发现导航相关技术的巨大潜力,尔后一起携手创业,矢志要成为全球航空、航海、车用及户外导航和其它电子产品市场的领导者。品牌名称 Garmin,正是两人名字的组合 — Gary 与 Min。

Garmin 的 Private Extension Manager 介绍

Visual Studio Code 的扩展 Garmin 的 Private Extension Manager 是一个用于管理和安装私有或自定义 VS Code 扩展的工具。它允许用户从非公共源安装扩展,比如内部部署的服务器或私有仓库,非常适合组织内部使用。

主要特征

  1. 私有源支持:支持从私有服务器或特定源安装扩展。
  2. 版本控制:管理不同版本的扩展,确保团队成员使用的是正确的扩展版本。
  3. 安全性:通过私有管理,增强扩展的安全性,避免使用可能包含恶意代码的公共扩展。
  4. 易于集成:可以轻松集成到现有的开发环境中,支持自动化安装和更新。
  5. 用户友好的界面:提供图形界面用于搜索、安装和管理扩展。

安装和使用

要使用 Private Extension Manager,首先需要在 VS Code 中安装它:

  1. 打开 VS Code。
  2. 转到扩展市场,搜索 Private Extension Manager
  3. 选择找到的扩展,点击安装。

配置私有扩展源:

  1. 安装完扩展后,打开 VS Code 的设置。
  2. 搜索 Private Extension Manager 相关设置。
  3. 添加私有源 URL。

安装私有扩展:

  1. 打开 Command Palette (快捷键 F1 或者 Ctrl+Shift+P)。
  2. 输入 Private Extension Manager: Install Private Extension
  3. 输入或选择扩展,并进行安装。

如何发布私有扩展

发布自行开发的扩展

要允许私有扩展管理器找到扩展,要使用 vsce 以 VSIX 格式打包它,创建包含 .vsix 文件的 NPM 包,并将其发布到 NPM 注册表。扩展的 package.json 必须包含一个带有 .vsix 文件路径的文件数组,以便扩展管理器知道要安装什么。在 prepublishOnly 脚本中使用 vsce 包,以确保 NPM 包始终包含最新的扩展包。

请注意,当 Private Extension Manager 显示扩展的详细信息时,它将解压最新版本的 NPM 包以读取其 README 和 CHANGELOG 文件,但不会解压 .vsix 文件。如果扩展有图标,请确保它可以通过 HTTPS 访问,或者通过在 package.json 的文件数组中引用它直接包含在 NPM 包中。

Visual Studio Code 不支持范围扩展名,例如 @my-org/my-extension。建议创建一个仅包含 Visual Studio Code 扩展的注册表以避免名称冲突。如果需要发布到包含非 Visual Studio Code 扩展包的注册表,请在 package.json 中添加一个关键字字段,并使用相同的关键字标记所有扩展,以便可以过滤到扩展,或者确保所有非扩展包都具有范围。

使用 publishConfig 设置扩展应发布到的注册表。可能还需要使用 npm login --registry= 对此注册表进行身份验证。使用 npm publish 。发布扩展程序(不是 vsce 发布,因为后者会发布到公共扩展程序库)。

package.json 应该看起来像一个常规扩展清单,但带有额外的文件和 publishConfig 字段以及一个 prepublishOnly 脚本来处理特定于 NPM 的行为:

{
    "name": "example-extension",
    "displayName": "Example Extension",
    "description": "This is an example extension.",
    "version": "1.2.3",
    "author": {
        "name": "John Doe",
        "email": "John.Doe@garmin.com"
    },
    "publisher": "garmin",
    "engines": {
        "vscode": "^1.40.0"
    },
    "icon": "media/icon.png",
    "files": [
        "extension.vsix",
        "media/icon.png"
    ],
    "publishConfig": {
        "registry": "https://my-private.registry"
    },
    "scripts": {
        "prepublishOnly": "vsce package -o extension.vsix",
        ...
    },
    "devDependencies": {
        "vsce": "^1.69.0",
        ...
    }
    ...
}

注意:在安装扩展之前不会运行准备脚本。如果有本机依赖项,​​则不应使用 node-gyp 在用户的机器上构建它们,而应为每个受支持的平台自行构建它们并将它们包含在 .vsix 中或将它们托管在服务器上并让扩展在运行时下载它们。

操作系统特定的扩展

默认情况下,使用文件数组中的第一个 .vsix 文件。如果每个平台都有不同的本机依赖项,​​则可以使用 osSpecificVsix 根据操作系统选择一个 .vsix 文件。


“osSpecificVsix”:{
“linux”:“extension-linux.vsix”,
“win32”:“extension-win32.vsix”,
“default”:“extension-default.vsix”,
},

包必须包含列出的所有文件。 default(可选)用于在没有显式键匹配的情况下选择文件;否则在不支持的平台上会显示错误。

发现和使用扩展

扩展已发布到 NPM 私有库之后,就需要告诉 Private Extension Manager 如何找到它们。这可以使用工作区配置文件和/或用户设置来完成。

工作区配置

Private Extension Manager 使用类似于 Visual Studio Code 的 extensions.json 的配置文件来允许工作区推荐扩展。在任何工作区文件夹中创建一个名为 .vscode/extensions.private.json 的文件来定义私有扩展注册表和任何推荐的扩展。您可以使用私有扩展:配置推荐扩展或私有扩展:配置工作区注册表命令打开此文件,如果尚不存在,则从模板创建它。

该文件具有以下结构:

{
    "registries": [
        {
            "name": "My Private Registry",
            "registry": "https://my-private.registry",
        }
    ],
    "recommendations": [
        "garmin.example-extension"
    ]
}

registries 数组定义一个或多个 NPM 注册表以搜索私有扩展。每个项目支持以下字段:

  • name:要显示的注册表名称。
  • registry:(可选)包含扩展包的 NPM 注册表的地址。如果省略,则根据标准 NPM 配置文件确定注册表。
  • query:(可选)仅显示与此搜索查询匹配的包。这可以是搜索词数组或带有空格分隔词的字符串。例如,“keywords:group1 keywords:group2”将仅显示具有关键字 group1 或 group2 的包。
  • enablePagination:(可选)如果为 true,则继续从注册表请求更多包结果,直到它给出空响应。如果为 false,则只发出一个请求。默认为 true。当使用的服务器不能正确处理 NPM 搜索 API 的 from 参数时,将其设置为 false。如果禁用此功能,您可能还需要增加限制以获取所有结果。
  • limit:(可选)请求包结果时限制每个查询的结果数。默认值:100。
  • npm-registry-fetch 支持的任何选项。如果您需要设置身份验证、代理或其他选项,请使用这些选项。

建议数组是来自任何注册表的私有扩展的可选列表,这些扩展应该推荐给工作区的用户。扩展的标识符始终是“ p u b l i s h e r . {publisher}. publisher.{name}”。例如:“garmin.private-extension-manager”。

可能有多个包含 extensions.private.json 文件的工作区文件夹。扩展管理器将显示所有注册表和建议。

注意:如果省略查询选项,查询文本将是一个星号。某些注册表服务器(如 Verdaccio)不会对所有可用软件包做出响应,因此可能需要设置查询才能获得任何结果。

用户配置

每个用户还可以指定要使用的注册表,无论使用 privateExtensions.registries 设置打开哪个工作区。其格式与 extensions.private.json 中的 registries 数组相同。

可以使用 Private Extensions: Add Registry… 和 Private Extensions: Remove Registry 命令快速编辑此设置。

频道 Channels

发布私有扩展时,可以使用 npm dist-tags 创建跟踪频道。这样,就可以发布扩展的预发布版本或其他特殊版本,而无需更新所有用户。只有跟踪特定发布频道的用户才能获得更新。

跟踪频道

要切换扩展的发布频道,请安装扩展,然后在扩展列表中右键单击它并选择切换发布频道…。或者,单击扩展详细信息页面上的频道按钮。

可以使用 privateExtensions.channels 设置对象手动选择频道。这是一个字典,其中每个键都是一个扩展标识符(“ p u b l i s h e r . {publisher}. publisher.{name}”),每个名称都是要跟踪的 dist-tag,如下例所示:

"privateExtensions.channels": {
    "garmin.example-1": "insiders", // Tracks the 'insiders' dist-tag
    "garmin.example-2": "beta",     // Tracks the 'beta' dist-tag
    "garmin.example-3": "1.0.0"     // Pins the extension to version 1.0.0
}

还可以通过列出版本而不是 dist-tag 将扩展固定到特定版本。私人扩展管理器不会通知固定扩展的更新,因此可以使用它暂时忽略扩展的较新版本。

发布到频道

要将扩展发布到频道,只需在发布时使用 npm dist-tags 指定频道名称。默认情况下,所有软件包都将引用最新标签。

npm publish . --tag=insiders

发布预发布版本时,建议使用预发布语义版本控制,例如 1.0.0-beta.0。

扩展更新

私人扩展管理器将定期检查安装的扩展是否有更新,并在发现任何更新时通知。可以调整检查间隔或使用 privateExtensions.updateCheckInterval 设置禁用它。

私人扩展侧栏面板还将用绿色箭头指示任何具有新版本的扩展。单击它将更新扩展。

通常需要重新加载 Visual Studio Code 窗口才能使更新生效。

远程开发

使用远程开发扩展(例如 Remote-SSH)时,请安装私人扩展管理器:远程助手扩展,以授予私人扩展管理器对本地计算机的访问权限。

私人扩展管理器将尝试推断 VS Code 将在哪里安装扩展。如果工作区扩展显示“本地安装”或反之亦然,请在扩展的 package.json 中设置 extensionKind 属性,以告知 VS Code 和私有扩展管理器应在何处安装扩展。

故障排除

如果成功连接到私有 NPM 注册表并且没有看到任何错误,但也没有看到任何扩展,请首先打开“输出”面板 (Ctrl+Shift+U) 并检查“私有扩展管理器”的下拉列表。如果存在,它可能包含有关扩展为何安装的信息

如果包没有被丢弃,它们可能一开始就找不到。如果未在注册表配置中指定查询或其他选项,则默认搜索查询为:

{registry-url}/-/v1/search?text=*&size=20&from=0

检查注册表服务器对此的响应。某些服务器(如Verdacio)不会用所有包的列表响应text=*,因此您可能需要更改注册表的查询选项(请参阅上面的“工作区配置”部分)。

参考



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oscar999

送以玫瑰,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值