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

news2024/12/26 23:19:49

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

和 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=*,因此您可能需要更改注册表的查询选项(请参阅上面的“工作区配置”部分)。

参考

  • 扩展地址: https://marketplace.visualstudio.com/items?itemName=garmin.private-extension-manager
  • 源码地址: https://github.com/joelspadin-garmin/vscode-private-extension-manager


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

昂科烧录器支持TI德州仪器的32位微控制器TMS320F28032

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中TI德州仪器的32位微控制器TMS320F28032已经被昂科的通用烧录平台AP8000所支持。 C2000™ 32位微控制器针对处理、感应和驱动进行了优化,可提高实时控制应用&#x…

IDEA全局搜索Jar包中内容

IDEA全局搜索Jar包中内容 【一】下载源码【二】搜索内容【1】按文件名搜索【2】全局关键字搜索【3】方法引用 【一】下载源码 想要搜索Jar中关键字,必须先把jar包源码下载下来,否则搜不到。 Preferences --> Maven --> Importing,根据…

类与对象的介绍

目录 一、类与实例的关系 二、快速入门-面向对象的方式解决养猫问题 三、类和对象的区别和联系 四、对象在内存中的存在形式 五、属性/成员变量 1、基本介绍 2、注意事项和细节说明 六、类的定义和使用 1、如何定义类 2、如何创建对象 3、如何访问属性 七、对象的传…

深⼊理解指针(4)

1. 回调函数是什么? 2. qsort使⽤举例 3. qsort函数的模拟实现 1. 回调函数是什么? 1. 回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数&#xff…

【Python】Numpy概述安装及使用

文章目录 Numpy概述Numpy开发环境搭建Numpy使用创建数组创建一维数组创建二维数组创建三维数组,array()函数ndmin参数的使用array()函数dtype参数的使用随机数创建 Numpy概述 Numpy是科学计算基础库,提供大量科学计算相关功能,比如数据统计&…

SpringMabatis学习笔记1

今日内容:搭建mybatis ORM 配置数据源 $#的区别 增删改 ORM (Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制&#xff0…

2024软考注意!!《系统规划与管理师》大概率要改版,新教材已出

系统规划与管理师考试是全国计算机技术与软件专业技术资格考试的高级水平考试之一,一年仅考一次,也是2024年下半年的4门高级考试中,最适合零基础考生的高级科目。近日在国家版本数据中心,查到系统规划与管理师已经有2024最新版的教…

Windows常用的运行命令

cmd - 命令提示符 cmdcalc - 打开计算器 calcservices.msc - 本地服务设置 services.msccontrol - 打开控制面板 controlwinver - 查看windows版本 winvermstsc - 连接远程电脑 mstsc ms t(terminial终端) s(service服务)c(client客户端) mstscmspaint - 打开画图 m…

特斯拉智驾方案演变过程

目录 一、概述二、特斯拉算法的发展历程2.1 特斯拉第一代算法:HydraNets2.2 特斯拉第二代算法:BEV + Transformer2.3. 特斯拉第三代算法:占据网络2.4. 特斯拉第四代算法:端到端方案三、智驾技术特点3.1 算法3.2 算力3.3 数据四、端到端挑战一、概述 在当今科技飞速发展的时…

智能家居沙盘系统-智慧家居沙盘系统

智能家居和物联网技术是当前科技领域的热门话题,随着各类智能家居产品的不断推出,智能家居市场也逐渐呈现出蓬勃发展的态势。智能家居快速发展,而物联网相关人才供应远远不足。高校开展智能家居工程及设计人才教育培养具有重大意义。 基本介绍…

一键登录,打造华为账号便捷新体验

作为鸿蒙世界的通行证,一个华为账号可以登录所有的HarmonyOS设备,为HarmonyOS设备无缝衔接和协同使用提供诸多便利。HarmonyOS SDK华为账号服务(Account Kit)提供简单、快速、安全的登录功能,让用户快捷地使用华为账号…

04:【stm32】LED编程和按键控制

LED编程和按键控制 1、LED编程1.1、点亮一课LED灯 2、按键控制2.1、通过一个按钮控制LED灯的亮灭 1、LED编程 1.1、点亮一课LED灯 首先,我们想象一下,让LED灯点亮,引脚应该是输出模式,那么应该是通用模式,还是复用模式…

视频如何生成二维码(自动生成二维码)完整教程

在企业中,产品视频二维码怎么制作,产品二维码怎么实现微信扫码便捷观看?上图文教程:视频二维码生成器/上传视频自动生成二维码完整教程。 目前市面上有很多工具,可以实现,比如草料二维码、酷播云二维码等等…

软考:软件设计师 — 10.面向对象技术

十. 面向对象技术 1. 面向对象基本概念 (1)对象与类相关概念 在面向对象的系统中,对象是基本的运行时的实体,它既包括数据(属性),也包括作用于数据的操作(行为)。一个…

计算机组成原理 —— 微操作控制器

计算机组成原理 —— 微操作控制器 指令,微操作,微指令和微程序之间的关系指令 (Instruction)微操作 (Micro-operation)微指令 (Microinstruction)微程序 (Microprogram)关系示例 微程序控制器的基本结构微程序控制器的基本结构工作流程 微指令的基本格式…

AI技巧---1个万能公式,让AI帮你快速写汇报、方案、总结

现阶段我们跟AI沟通,主要是通过提示词。提示词怎么写,其实就决定了AI输出内容的质量和效果,这是用AI给公文写作提效的基本技能。 但如果你已经尝试过用AI写公文,可能会有这样的感受,就是AI输出的内容很多都是正确的废…

【PG高可用】Repmgr源码分析之主库监控

repmgr需要在集群中每个节点上以扩展的形式安装插件,运行在每个节点上的repmgrd可以监控复制以及执行故障转移或切换等操作增强 PostgreSQL 的内置复制功能。 如何可靠快速的监控主节点故障一般是所有数据库高可用程序中都会有的环节,本篇内容主要介绍不…

掌握 Linux 信号机制的技巧与策略

目录 一.信号的产生1.信号的产生(预备)2.异常(1).硬件异常(2).core dump(3).软件条件产生信号 二.信号的保存1.信号的发送2.block.pending.handler(保存)(1).sigset_t类型 三.信号的捕捉处理1.什么时候捕捉2.三顾进程地址空间3.如…

深圳水务展|2025深圳国际水务科技博览会

2025深圳国际水务科技博览会 展会主题: 新质生产力赋能水务产业高质量发展 展会时间:2025年7月24-26日 展会地点:深圳会展中心(福田) 主办单位: 广东省水利学会 深圳市水务学会 协办单位: 中国水利…

发论文idea来了!小样本学习+目标检测,12个创新点汇总

在一些特定应用领域,获取大规模且高质量标注的数据十分困难,比如医学图像分析。为了解决这个问题,研究者们提出了小样本目标检测。 小样本目标检测是一种结合了小样本学习和目标检测两者优势的技术,能够在有限的训练数据下&#…