⚡我做了一个批量下载 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 小时前
从 Navigation State 反推架构腐化
前端·架构·react
前端程序猿之路7 小时前
Next.js 入门指南 - 从 Vue 角度的理解
前端·vue.js·语言模型·ai编程·入门·next.js·deepseek
大布布将军8 小时前
⚡️ 深入数据之海:SQL 基础与 ORM 的应用
前端·数据库·经验分享·sql·程序人生·面试·改行学it
川贝枇杷膏cbppg8 小时前
Redis 的 RDB 持久化
前端·redis·bootstrap
JIngJaneIL8 小时前
基于java+ vue农产投入线上管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
天外天-亮9 小时前
v-if、v-show、display: none、visibility: hidden区别
前端·javascript·html
jump_jump9 小时前
手写一个 Askama 模板压缩工具
前端·性能优化·rust
be or not to be9 小时前
HTML入门系列:从图片到表单,再到音视频的完整实践
前端·html·音视频
90后的晨仔9 小时前
在macOS上无缝整合:为Claude Code配置魔搭社区免费API完全指南
前端
沿着路走到底10 小时前
JS事件循环
java·前端·javascript