vsix打包默认包含项目目录下所有文件,不含自动过滤;不该进的有node_modules、.git、dist/out、.env等,须用.vscodeignore显式排除。

vsix打包默认包含什么,哪些不该进
VS Code 打包生成 .vsix 时,本质是把插件项目目录(含 package.json)压缩成 ZIP,并附加签名和元数据。它不会自动过滤掉 node_modules、.git、dist 或临时文件——只要它们在当前目录下,就会被塞进去。结果就是:体积虚高、安装慢、甚至因含敏感文件(如本地 .env)导致安全风险。
常见误操作是直接在项目根目录执行 vsce package,却没清理或声明排除规则。你得主动告诉 vsce “哪些东西别打包”。
用 .vscodeignore 精确控制打包内容
.vscodeignore 是 vsce 唯一认的打包过滤文件,作用类似 .gitignore,但只影响 .vsix 构建过程,不影响 Git 或 VS Code 的文件显示。
- 必须放在项目根目录,文件名严格为
.vscodeignore(不能是.vscode/ignore或其他变体) - 语法支持
#注释、通配符*和双星号**,不支持!取反 - 推荐基础内容:
node_modules/ .git/ .gitignore .nyc_output coverage/ dist/ out/ *.log .env .vscode/
注意:dist/ 和 out/ 要写斜杠结尾,否则可能只排除同名文件而非目录;.vscode/ 必须显式排除,否则可能打包进你本地调试用的 launch.json。
为什么 files.exclude 和 search.exclude 对打包无效
这两个设置只作用于 VS Code 编辑器运行时行为:files.exclude 控制资源管理器是否显示文件,search.exclude 控制 Ctrl+Shift+F 搜索范围。它们完全不参与 vsce 打包流程。
有人试图在 settings.json 里加规则来“让打包自动忽略”,这是徒劳的。vsce 不读取任何 VS Code 用户或工作区配置,只认 .vscodeignore 和实际文件系统路径。
另外,vsce package 也不会检查 package.json 中的 files 字段——那是 npm publish 用的,对 vsix 无效。
验证打包结果是否干净
打包完别急着发,先解压检查内容是否符合预期:
- 把
my-extension-1.0.0.vsix后缀改成.zip,用任意解压工具打开 - 确认根目录只有
package.json、extension.js(或src/)、图标等必要资源 - 重点检查有没有意外出现的
node_modules/(哪怕只有一层空目录)、.git/或大体积日志文件
如果发现漏排除,改完 .vscodeignore 后必须删掉已生成的 .vsix 文件再重跑 vsce package——vsce 不会增量更新,旧包不会自动刷新。
容易被忽略的细节:TypeScript 编译产物和 source map
如果你用 TypeScript 开发插件,默认 tsc 输出到 out/ 或 dist/,而这些目录很可能被你当成“源码一部分”忘了排除。更隐蔽的是:即使你配置了 "outDir": "out",如果 tsconfig.json 里开了 "sourceMap": true,.map 文件也会生成并打进 vsix。
除非你明确需要调试发布版(极少见),否则应确保:
-
.vscodeignore包含out/、dist/、**/*.map -
package.json的main字段指向编译后入口(如out/extension.js),而不是src/extension.ts
否则用户安装后看到的可能是未编译的 TS 源码,或者因缺少 out/ 目录而报错 Cannot find module './out/extension'。











