vs code 插件私有化需本地构建+离线安装+内部托管:运行 yarn run package-extension 生成真离线 .vsix,启用 offline: true 并验证含 node_modules/drawio;内网用 nginx 模拟 marketplace 路径,设 content-type: application/vsix;绕过签名/策略拦截需启动参数或组策略配置。

VS Code 插件市场无法直接私有化——官方 Marketplace 是中心化服务,不提供源码或部署包。企业要实现插件“可控分发”,必须绕过 Marketplace,走本地构建 + 离线安装 + 内部托管的组合路径。
vscode-drawio 离线构建后如何生成可部署的 extension.vsix
这是最典型的私有化落地动作:不依赖网络、不调用远程 draw.io 服务、所有资源打包进 VSIX。
- 克隆源码后必须运行
yarn run package-extension(不是yarn run build),后者只产出 JS 文件,前者才真正打包成.vsix -
package.json中的publisher和name字段需与企业内网域名/命名规范对齐,避免后续策略拦截(如某些安全网关会按 publisher 名称过滤) - 构建前确认
drawio-offline配置已启用:在src/extension.ts中检查是否设置了offline: true和本地drawio资源路径,否则仍会尝试加载 cdn.draw.io - 生成的
extension.vsix实际是 ZIP 包,可用unzip -l extension.vsix | grep drawio验证是否含node_modules/drawio目录——没这个就不是真离线
企业内网如何替代 Marketplace 提供插件发现与安装能力
没有官方支持,就得用轻量级 HTTP 服务模拟 Marketplace 的基础行为,重点满足 code --install-extension 命令的底层协议。
-
code --install-extension实际是向https://marketplace.visualstudio.com/_apis/public/gallery/publishers/{publisher}/vsextensions/{name}/{version}/vspackage发请求,你只需在内网起一个 Nginx 或 Python http.server,把vsix文件放在对应路径即可 - 推荐路径结构:
/publishers/mycorp/vsextensions/drawio-offline/1.0.0/vspackage,这样就能用code --install-extension mycorp.drawio-offline安装 - 不要试图复刻完整 Marketplace UI;前端团队若需要“插件市场页”,用静态 HTML +
<a href="vscode://..."></a>即可跳转安装,VS Code 会自动识别协议 - 注意
Content-Type必须设为application/vsix,否则 VS Code 安装时会报 “Invalid extension package” 错误
为什么 code --install-extension 在内网失败?常见拦截点
不是命令本身问题,而是企业网络策略和 VS Code 自身机制双重作用的结果。
- VS Code 默认会校验扩展签名,私有构建的
.vsix若未用微软证书签名,需在启动时加参数:code --disable-extension-corruption-check --disable-workspace-trust - 某些企业防火墙会拦截
vscode:协议回调,表现为点击安装链接无反应——此时改用命令行code --install-extension /path/to/extension.vsix绕过协议解析 - Windows 组策略可能禁用“从非商店来源安装扩展”,需管理员修改注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\VSCode\Extensions\AllowAllExtensions设为1 - 如果插件依赖
node_modules外部模块(如某些 LLM 插件调用ollamaCLI),.vsix打包时不会包含这些二进制,必须提前在目标机器部署好运行时环境
真正卡住的从来不是构建或分发,而是 VS Code 启动时对扩展 host 进程的沙箱限制和企业策略对协议/签名/网络的层层拦截。每一步都得验证实际行为,而不是只看文档描述是否“理论上可行”。











