⚡我做了一个批量下载 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安装功能。

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

相关推荐
陈_杨1 分钟前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP-- 卡片编辑功能
前端·harmonyos
Swift社区6 分钟前
Flutter 的异步问题,为什么和前端 Promise 问题高度相似?
前端·flutter
程序员Agions7 分钟前
AI 编程的"效率幻觉":为什么用了 Cursor 之后,你反而更累了?
前端·ai编程
Android技术之家9 分钟前
在手机上跑大模型?Google AI Edge Gallery 开源项目深度解析
前端·人工智能·edge·开源
DEMO派10 分钟前
CSS优先级规则以及如何提升优先级方案详解
前端·javascript·css·vue.js·reactjs·html5·angular.js
hhcccchh13 分钟前
学习vue第十一天 Vue3组件化开发指南:搭积木的艺术
前端·vue.js·学习
AntoineGriezmann15 分钟前
基于 Unocss 的后台系统 SVG 图标方案实践
前端
小夏卷编程16 分钟前
ant-design-vue 2.0 a-table 中实现特殊行样式,选中样式,鼠标悬浮样式不一样
前端·javascript·vue.js
wulijuan88866616 分钟前
前端性能优化之图片webp
前端
一颗烂土豆17 分钟前
ECharts 水球图不够炫?试试 RayChart 的创意可视化玩法
前端·vue.js·数据可视化