vscode断点停在dist而非src,是因为调试器只认launch.json的outfiles和sourcemaps配置,不读rollup.config.js;需确保rollup输出sourcemap、tsconfig开启sourcemap,且launch.json中outfiles路径与rollup实际输出文件(如dist/index.mjs)完全匹配。

VSCode 里调试 Rollup 打包脚本,为什么断点总停在 dist 文件里
因为 VSCode 调试器根本不读 rollup.config.js,它只认 launch.json 里写的 outFiles 和 sourceMaps。哪怕你配置了 output.sourcemap: true,只要 outFiles 路径没对上生成的 JS 文件,断点就永远进不了 src/。
常见错误现象:
- 在
src/main.js打断点,运行调试后停在dist/bundle.js某行,控制台还报Could not read source map -
rollup.config.js里设了output.file: 'dist/index.mjs',但launch.json的outFiles写成"${workspaceFolder}/dist/**/*.js"—— 后缀不匹配,直接失效
实操建议:
-
rollup.config.js中必须显式开启 sourcemap:output: { sourcemap: true }(不能是'hidden'或false) -
launch.json的outFiles必须精确匹配输出路径,比如输出是dist/index.mjs,就得写"${workspaceFolder}/dist/index.mjs" - 如果用
output.dir,确保实际生成的是.js文件;用了@rollup/plugin-terser可能会改后缀,得同步调整outFiles
npx rollup -c 是唯一靠谱的启动方式
直接在 VSCode 终端敲 rollup -c 大概率报 command not found,不是 Node 没装好,而是 VSCode 终端默认不识别 node_modules/.bin/ 下的可执行文件。
使用场景:
- 项目本地安装了
rollup(npm install rollup --save-dev),但没全局安装 - 多个项目用不同版本 Rollup,必须隔离运行环境
实操建议:
- 永远用
npx rollup -c启动,它强制走当前项目的node_modules/rollup - 在
package.json加脚本:"scripts": { "build": "rollup -c", "dev": "rollup -c -w" },然后用 Ctrl+Shift+P → “Tasks: Run Script” 触发,比手动输更稳、可复用 - 别信“装个插件就能一键运行”的说法——Rollup 本质是命令行工具,VSCode 只负责调用和调试
哪些 Rollup 插件真影响 VSCode 编辑体验
90% 的 Rollup 插件只在打包时起作用,对编辑器里的红波浪线、跳转、补全毫无帮助。装一堆反而拖慢 TS 语言服务。
真正有用的就这几个:
-
@rollup/plugin-node-resolve:解决import _ from 'lodash'这类第三方包的红波浪线,但需配合 TS 的types声明才完整 -
@rollup/plugin-typescript或@rollup/plugin-sucrase:让 TS 类型检查提前介入构建流程,避免打包时才发现类型错误 -
@rollup/plugin-alias:如果你用了路径别名(如@/utils),这个插件能让 VSCode 正确解析跳转
注意:@rollup/plugin-commonjs、@rollup/plugin-terser 这类纯构建插件,对编辑体验零影响,别指望它们让 import 更顺滑。
TS 项目里调试失败,大概率卡在这三个地方
不是 Rollup 配错了,而是 TypeScript 和调试链路没对齐。最常被忽略的是 tsconfig.json 本身没开 sourcemap。
关键参数差异:
-
compilerOptions.sourceMap必须为true(否则 Rollup 即使生成 sourcemap 也没源信息) -
compilerOptions.declaration建议设为false(除非你真要发布类型声明,否则增加构建负担) -
compilerOptions.outDir如果设了,要和 Rollup 的output.dir一致,否则 VSCode 找不到映射目标
性能影响:
- 开
sourceMap: true会让 TS 编译变慢,但调试阶段值得;上线构建可关掉 - 如果同时用 TS + Rollup +
@rollup/plugin-typescript,记得关掉tsconfig.json里的noEmit,否则 Rollup 拿不到编译产物











