You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CRA构建的React应用中调试Rollup打包的自定义React库

问题根因

断点失效、打开非本地源文件的核心原因是VS Code调试器无法将sourcemap中记录的源文件路径,映射到你本地工作区的实际文件路径,按以下步骤调整配置即可解决:


1. 修正lib包Rollup配置

统一sourcemap生成规则,移除重复、错误的路径配置:

import path from 'path';
import styles from 'rollup-plugin-styles';
import esbuild from 'rollup-plugin-esbuild-transform';
import packageJson from './package.json';

const config = {
    input: './src/index.ts',
    output: [
        {
            file: packageJson.module,
            format: 'esm',
            name: 'selftest',
            sourcemap: true,
            // 统一配置sourceRoot,指向lib包的src目录
            sourceRoot: path.resolve(__dirname, 'src')
        },
    ],
    plugins: [
        styles(),
        esbuild([
            {
                loader: 'json',
                minifyWhitespace: true
            },
            {
                loader: 'ts'
            },
            {
                loader: 'tsx',
                banner: "import * as React from 'react'"
                // 移除重复的sourcemap、sourceRoot配置,统一由Rollup输出层管理
            },
            {
                loader: 'js',
                include: /\.[jt]sx?$/,
                target: 'es2017'
                // 移除重复的sourcemap配置
            }
        ])
    ],
    external: [
        'react', 'react-dom', // 补充react为外部依赖,避免重复打包
    ],
}
export default config;

2. 修正VS Code launch.json调试配置

重点修正根路径映射,新增sourcemap路径匹配规则:

{
    "name": "Attach to Edge",
    "port": 9222,
    "request": "attach",
    "type": "pwa-msedge",
    // 修正webRoot为app项目的根目录,而非工作区根目录
    "webRoot": "${workspaceFolder}/app",
    "trace": true,
    "sourceMaps": true,
    "runtimeArgs": [],
    "outFiles": [
        "${workspaceFolder}/app/build/**/*.js",
        "${workspaceFolder}/lib/dist/**/*.js" // 替换为lib包实际输出的js路径,避免硬编码绝对路径
    ],
    // 新增sourcemap路径映射规则,将webpack打包后引用的lib源码路径映射到本地实际路径
    "sourceMapPathOverrides": {
        // 请将下方的<your-lib-package-name>替换为你lib包package.json中定义的name字段值
        "webpack://_N_E/./node_modules/<your-lib-package-name>/src/*": "${workspaceFolder}/lib/src/*",
        "webpack:///./node_modules/<your-lib-package-name>/src/*": "${workspaceFolder}/lib/src/*",
        "webpack:///src/*": "${webRoot}/src/*",
        "*": "${webRoot}/*"
    }
}

如果不确定映射规则怎么写,可在调试时打开VS Code调试控制台,输入.scripts命令,就能看到所有加载的源文件路径,对照调整即可。


3. 补充app项目调试配置

在app根目录新建.env文件,确保webpack处理node_modules中link的lib包的sourcemap:

GENERATE_SOURCEMAP=true
# 若使用CRA 5+,补充以下配置
FAST_REFRESH=false

生效步骤

  • 重新执行lib包的构建命令,生成新的产物和sourcemap
  • 重启app的开发服务,清除缓存
  • 重启VS Code调试会话,再次尝试打断点

内容的提问来源于stack exchange,提问作者Pachari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:36:03