⚡我做了一个批量下载 VSCode 插件的小工具

前言 ✨

​ 因为我经常需要在离线环境开发项目,经常需要将vscode的插件传进去进行安装,之前采用的方案都是通过复制外网。vscode里面的extensions文件夹,将其传进去覆盖来实现的。

​ 但是这种方式需要知道vscode安装位置,并且最新版覆盖进去的时候不知道为什么,插件是有了,但是没有在插件列表里面显示出来。处理起来也比较麻烦。于是打算直接去下载插件的visix包。

​ 一个个下又非常麻烦,于是诞生了这个工具。

项目地址 📦

如果对你有帮助的话,请帮我点一个 star ⭐

项目地址:

一个用于批量下载 VSCode 插件 vsix 包的实用工具,支持离线环境快速安装插件。

名称 链接
GitHub仓库 leixq1024/vscode-vsix-download
使用文档 README

实现思路 🛠️

  1. 通过命令行获取本地已安装的 VSCode 插件列表及版本信息。
  2. 利用 Open VSX Registry 构建每个插件的 vsix 下载链接。
  3. 批量下载所有插件的 vsix 安装包,保存到本地文件夹,便于离线环境安装。
flowchart TD A[获取本地已安装插件列表] --> B[构建插件 vsix 下载链接] B --> C[批量下载 vsix 安装包] C --> D[离线环境安装插件]

核心代码介绍 💻

获取vscode已安装的插件列表 📋

​ 通过命令行中的code --list-extensions --show-versions命令,可以获取到当前vscode插件的列表。

css 复制代码
code --list-extensions --show-versions

像下面这样,其中你可以看到版本号和插件名称。

通过这个命令获取到插件列表之后,用代码处理一下格式。

js 复制代码
const { execSync } = require("child_process");
const getExtensions = () => {
  try {
    // 执行命令获取插件列表
    const output = execSync("code --list-extensions --show-versions", { encoding: "utf-8" });
    return output
      .split("\n")
      .filter(Boolean)
      .map(line => {
        // 解析每一行,格式为 publisher.extension@version
        const match = line.match(/^([^.]+)\.([^\@]+)\@(.+)$/);
        return match ? { publisher: match[1], extension: match[2], version: match[3] } : null;
      })
      .filter(Boolean);
  } catch (e) {
    // 获取失败时抛出异常
    throw new Error("无法获取 VSCode 插件列表,请确保已安装 VSCode 并 code 命令可用。");
  }
};

这里我用了execSync创建了一个子进程,并且执行了前面的那个命令。

上面代码的效果如下:

构建下载地址 🔗

​ 上面的步骤已经获取到了插件列表,接下来我们就需要一个网站提供下载链接。

Open VSX Registry

​ 这个open visix网站收录了vscode拓展,基本上你用的插件在这上面都是可以找到的,如果实在没找到,一般数量不会很多,这时候去github翻找一下,或者去插件官网找找也是有的。

随便打开一个插件往下找,就找到这个下载地址,点击下载。

下载下来的就是我们需要的vsix包。

经过一番处理,最终代码如下:

js 复制代码
const getVsixUrl = ({ publisher, extension, version }) =>
  `https://open-vsx.org/api/${publisher}/${extension}/${version}/file/${publisher}.${extension}-${version}.vsix`;

这样就可以获取我们插件的vsix文件下载地址了。

下载插件 ⬇️

​ 接下来就是下载插件了,这边我用axios去下载,你要用fetch也是可以的。

js 复制代码
const downloadVsix = async (url, dest) => {
  const response = await axios({
    method: "get",
    url,
    responseType: "stream", // 以流的方式下载
    maxRedirects: 5 // 支持重定向
  });
  if (response.status !== 200) throw new Error(`下载失败,状态码: ${response.status}`);
  const fileStream = fs.createWriteStream(dest);
  return new Promise((resolve, reject) => {
    response.data.pipe(fileStream);
    response.data.on("error", reject);
    fileStream.on("finish", resolve);
  });
};

如何使用 🚀

拉取代码 🧲

shell 复制代码
git clone https://github.com/leixq1024/vscode-vsix-download.git

拉取下来之后里面,有几个文件,其中download-vsix.js就是主要的代码文件了。

安装依赖 📦

arduino 复制代码
pnpm install 
// 或
npm install 
// 或
yarn install 

运行项目 ▶️

shell 复制代码
pnpm run start

​ 运行之后,会开始检测你安装的插件。

检测完成之后就会开始按顺序下载。

下载成功之后会显示,成功了多少个,并且在当前目录下会有一个downloaded文件夹。

这个文件夹里面的就是下载好的vsix文件。

这样你就可以直接将文件传入离线环境的开发环境,再用插件这边的从vsix安装功能。

这样就可以把你的插件装进去了。

相关推荐
程序员黑豆7 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC8 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea8 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
浮生望8 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少8 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0079 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis9 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝10 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师11 小时前
新兴多智能体系统的模式与问题
前端
用户0595401744612 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css