调试在 JetBrains Rider 中不起作用的 React Typescript 项目

Posted

技术标签:

【中文标题】调试在 JetBrains Rider 中不起作用的 React Typescript 项目【英文标题】:Debugging of a React Typescript project not working in JetBrains Rider 【发布时间】:2021-10-16 21:00:05 【问题描述】:

我想做什么

我有一个 React Typescript 项目,我想在 Rider 中设置一个调试配置,它满足以下条件:

开发服务器通过热重载启动,所以当我更改文件时,应用程序会自动更新 一个 javascript 调试器附加到正在运行的应用程序,因此我可以在 Rider 内部的 jsx 文件中设置断点(而不是在 Chrome DevTools 中),并且应用程序实际上会在断点处停止 我更喜欢直接使用 webpack 而不是通过 create-react-app 间接使用

什么工作

我目前使用webpack serve 在 webpack 开发服务器上运行我的应用程序以用于开发目的。开发服务器正在运行,我可以在 Chrome DevTools 中成功调试 typescript 代码,如您所见here。

问题

如上所述,现在我想从 Rider 内部附加一个调试器,这样我就可以直接在我的 IDE 中设置断点 - 这就是我失败的地方。

我尝试过的

在用于调试 webpack 应用程序的 Jetbrains 文档 (https://www.jetbrains.com/help/rider/Using_Webpack.html#debug_application_that_uses_webpack) 中,有人告诉我调试应该与使用 create-react-app 设置的 React 应用程序一样。所以我按照这里的说明操作:https://blog.jetbrains.com/webstorm/2017/01/debugging-react-apps/?_ga=2.129883279.2614435.1634130690-1852059688.1626293073。

    我在调试模式下从运行配置中运行yarn start。这执行了我的 package.json 中定义的 webpack serve

该页面位于 http://localhost:9000,我在进程控制台中得到以下输出:

/usr/local/bin/node /usr/local/lib/node_modules/npm/bin/npm-cli.js run start --scripts-prepend-node-path=auto
Debugger listening on ws://127.0.0.1:42631/294d3b20-969f-486e-917e-22c6350d23e4
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.

> applicationName@1.0.0 start
> webpack serve

Debugger listening on ws://127.0.0.1:33159/3b5cb2c1-674a-4d9c-888f-b3bdf6f3d3a6
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
<i> [webpack-dev-server] Project is running at:
<i> [webpack-dev-server] Loopback: http://localhost:9000/
[...]

但是,如果我 ctrl+shift+单击控制台中的 http://localhost:9000/ 链接,我会得到以下 error。

我的客户端应用程序文件夹位于 C# 项目 (SolutionName/AppliationName/ClientApp) 的子文件夹内,我将其用作后端。这可能会导致问题吗?

我有点卡在这里,所以我很高兴得到所有帮助。 :)

您将在下面找到有关我的系统和相关文件的更多信息。

我的环境

操作系统:Ubuntu 20.04.2 IDE:Rider 2021.2.2 依赖的版本在下面的 package.json 中列出

文件

package.json


   [...]
   "scripts": 
        "start": "webpack serve",
        "watch": "webpack --watch",
        "build": "tsc && NODE_ENV=production webpack",
        "build-dev": "webpack"
    ,
    "dependencies": 
        "@types/react": "^17.0.21",
        "@types/react-dom": "^17.0.9",
        "@types/typescript": "^2.0.0",
        "react": "^17.0.2",
        "react-dom": "^17.0.2"
    ,
    "devDependencies": 
        "@babel/core": "^7.15.8",
        "@babel/preset-env": "^7.15.8",
        "@babel/preset-react": "^7.14.5",
        "@babel/preset-typescript": "^7.15.0",
        "@webpack-cli/generators": "^2.4.0",
        "webpack": "^5.58.1",
        "webpack-cli": "^4.9.0",
        "webpack-dev-server": "^4.3.1",
        "workbox-webpack-plugin": "^6.3.0",
        "babel-loader": "^8.2.2",
        "css-loader": "^6.4.0",
        "file-loader": "^6.2.0",
        "style-loader": "^3.3.0",
        "ts-loader": "^9.2.6",
        "html-webpack-plugin": "^5.3.2",
        "mini-css-extract-plugin": "^2.4.2",
        "prettier": "^2.4.1",
        "typescript": "^4.4.3"
    

webpack.config.js

const path = require("path")
const HtmlWebpackPlugin = require('html-webpack-plugin')

let mode = "development";
if (process.env.NODE_ENV === "production") 
  mode = "production";


module.exports = 
  mode: mode,
  module: 
    rules: [
      
        test: /\.(ts|tsx)$/,
        exclude: /node_modules/,
        use: 
          loader: "babel-loader",
          options: 
            cacheDirectory: true,
            presets: [
              ["@babel/preset-env",  targets:  node: "8"  ],
              "@babel/preset-typescript",
              "@babel/preset-react"
            ]
          
        
      ,
      
        test: /\.css$/,
        use: ["style-loader", "css-loader"]
      ,
    ]
  ,
  plugins: [new HtmlWebpackPlugin( template: './public/index.html' )],
  resolve: 
    modules: [path.resolve(__dirname, 'src'), 'node_modules'],
    extensions: [".tsx", ".ts", ".jsx", ".js", "..."],
  ,
  output: 
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  ,
  devServer: 
    static: 
      directory: path.join(__dirname, 'public'),
    ,
    compress: true,
    port: 9000,
    open: true,
    hot: true
  ,
  // generate source maps to debug the initial source files
  devtool: "source-map"

【问题讨论】:

我遇到了一个非常相似的问题,我也遇到了类似的问题 :p 对我有一点帮助的一件事是通过创建 npm 配置并使用“调试”来运行应用程序骑手中给出的按钮,而不是手动运行命令并附加调试器。它对你有什么改变吗? 我已经使用了 npm 配置来调用 yarn start。我将在问题中添加此信息。我也按下了 Rider 中的调试按钮,但我还是得到了错误。所以我想我们被困在同一个地方。 :D 【参考方案1】:

问题的原因是 chromium 是使用 snap 安装的。这不起作用,但如果您直接从 debian 存储库安装 chromium 软件包,一切都会完美运行。

更多详情:https://rider-support.jetbrains.com/hc/en-us/community/posts/4409573673746-Javascript-Debugging-not-working-in-Rider

【讨论】:

以上是关于调试在 JetBrains Rider 中不起作用的 React Typescript 项目的主要内容,如果未能解决你的问题,请参考以下文章

在 JetBrains Rider 中调试从 docker compose 运行的 .Net Core 3 应用程序

Jetbrains Rider:[MSB4057] 项目中不存在目标“构建”

Jetbrains Rider:在调试器调用堆栈中显示“外部代码”

JetBrains Rider 中 Visual Studio 的“无需调试即可启动”?

JetBrains Rider lua怎么连上Unity调试

使用 Dockerfile 使用 Jetbrains Rider 调试 .NET Core 应用程序