根本原因是sourcemaps链路断开:vscode不读rollup.config.js配置,只认launch.json显式声明的映射关系;必须确保launch.json中"sourcemaps":true且"outfiles"精确匹配rollup实际输出路径(如dist/index.mjs),rollup.config.js中output.sourcemap为true或'inline',且output.format与文件后缀(.mjs/.js)严格一致。

为什么 launch.json 里断点进不了 src,只停在 dist/*.mjs
根本原因不是插件没装,而是 sourceMaps 链路断了:VSCode 不读 rollup.config.js 里的配置,只认 launch.json 显式声明的映射关系。三处必须严丝合缝:
-
launch.json中"sourceMaps": true且"outFiles"精确匹配 Rollup 实际输出路径(比如output.file: "dist/index.mjs"→"${workspaceFolder}/dist/index.mjs") -
rollup.config.js中output.sourcemap必须是true或'inline',不能是false或'hidden' -
output.format和后缀要一致:设了format: 'es'就默认输出.mjs,outFiles写**/*.js就永远匹配不上
怎么让 vite build --mode lib 在 VSCode 里可调试
Vite 的 library 模式本质还是调 Rollup,但调试入口不是直接跑 vite build,得绕过 Vite CLI,直连底层 Rollup 执行器:
- 别用
vite build启动调试,它不暴露 sourcemap 路径给 Node 调试器 - 在
package.json里加脚本:"build:lib": "vite build --mode lib",再另加一条:"debug:lib": "npx rollup -c rollup.config.mjs"(确保你导出的是 ES 模块配置) -
launch.json的"program"改成:"${workspaceFolder}/node_modules/rollup/dist/bin/rollup","args"设为["-c", "rollup.config.mjs"] - 如果用了
@rollup/plugin-typescript,确认tsconfig.json里"sourceMap": true且"declaration": false(避免 .d.ts 干扰)
rollup.config.js 中 output 配置影响调试的关键点
Library 模式下,output 不只是决定文件名,直接决定 VSCode 能不能定位源码:
-
output.file(单文件)→outFiles必须写死该路径,不能用 glob -
output.dir(多文件)→outFiles可用"${workspaceFolder}/dist/**/*.mjs",但得确认 Rollup 真输出了.mjs(format: 'es')或.js(format: 'cjs') -
output.sourcemapExcludeSources设为true会剥离源码内容,导致断点显示为空白行,调试时建议关掉 - 若同时输出多个 format(如
cjs+es),outFiles得覆盖全部后缀:"${workspaceFolder}/dist/**/*.{js,mjs}"
本地开发时改了 src,为什么 npm run build:lib 总是旧代码
这不是缓存问题,而是 Vite/Rollup 默认不监听 rollup.config.* 或 tsconfig.json 变更,改完配置后必须手动清构建产物:
- 每次改了
rollup.config.js或tsconfig.json,先删掉dist/目录再运行构建 - 加
"prebuild:lib": "rm -rf dist"(macOS/Linux)或"prebuild:lib": "rimraf dist"(Windows,需装rimraf)到package.jsonscripts - 如果用了
vite build --mode lib,注意它默认不走rollup.config.js,所有配置得写进vite.config.ts的build.rollupOptions里,否则改了也无效
最易被忽略的是 output.format 和文件后缀的隐式绑定——format: 'es' → .mjs,format: 'cjs' → .js,错配一丁点,sourceMap 就失效。











