reactjs - 引用错误 : $RefreshReg$ is not defined

标签 reactjs babeljs

在基于 CRA 的 React 应用程序中,当我导入也由普通应用程序代码(普通 === 非 worker )导入的文件并使用 babel dev 运行应用程序时,我在 webworker 文件(所有代码都使用 Typescript)中收到此错误服务器处于 Debug模式。
搜索此错误使我看到了各种特定于模块的问题报告/解决方案,但是我无法使用这些报告/解决方案。但很明显,这是一个 React 热重载问题,我想知道如何解决它,因为它使我无法在网络 worker 中使用我的应用程序代码。
我的开发依赖项是:

    "devDependencies": {
        "@babel/core": "^7.12.10",
        "@babel/preset-env": "^7.11.11",
        "@babel/preset-typescript": "^7.12.7",
        "@testing-library/react": "^11.2.3",
        "@types/classnames": "^2.2.11",
        "@types/color": "^3.0.1",
        "@types/d3": "^6.2.0",
        "@types/history": "4.7.8",
        "@types/jest": "^26.0.20",
        "@types/lodash": "^4.14.168",
        "@types/node": "^14.14.22",
        "@types/react": "^17.0.0",
        "@types/react-dom": "^17.0.0",
        "@types/react-test-renderer": "^17.0.0",
        "@types/react-window": "^1.8.2",
        "@types/resize-observer-browser": "^0.1.5",
        "@types/selenium-webdriver": "^4.0.11",
        "@types/topojson": "^3.2.2",
        "@types/uuid": "^8.3.0",
        "@types/ws": "^7.4.0",
        "@typescript-eslint/eslint-plugin-tslint": "^4.14.0",
        "acorn": "^8.0.5",
        "antlr4ts-cli": "^0.5.0-alpha.4",
        "eslint": "^7.18.0",
        "eslint-plugin-flowtype": "^5.2.0",
        "eslint-plugin-import": "^2.22.1",
        "eslint-plugin-jsdoc": "^31.3.3",
        "eslint-plugin-jsx-a11y": "^6.4.1",
        "eslint-plugin-prefer-arrow": "^1.2.2",
        "eslint-plugin-react": "^7.22.0",
        "eslint-plugin-react-hooks": "^4.2.0",
        "identity-obj-proxy": "^3.0.0",
        "jest": "26.6.0",
        "jest-transform-stub": "^2.0.0",
        "jest-websocket-mock": "^2.2.0",
        "mock-socket": "^9.0.3",
        "monaco-editor-webpack-plugin": "^1.9.1",
        "monaco-typescript": "^4.2.0",
        "raw-loader": "^4.0.2",
        "react-app-rewired": "^2.1.8",
        "react-scripts": "^4.0.3",
        "react-test-renderer": "^17.0.1",
        "selenium-webdriver": "^4.0.0-beta.1",
        "ts-jest": "^26.5.2",
        "tslint": "^6.1.3",
        "typescript": "^4.1.3",
        "typescript-eslint-parser": "22.0.0",
        "webdriver-manager": "^12.1.8",
        "webpack": "4.44.2",
        "webpack-bundle-analyzer": "^4.4.0",
        "worker-loader": "^3.0.8",
        "ws": "^7.4.3"
    },
我也可以应用的唯一有希望的解决方案是:https://github.com/pmmmwh/react-refresh-webpack-plugin/issues/176#issuecomment-683150213 ,但这没有帮助。我仍然遇到同样的错误。我的网络 worker 代码是:
/* eslint-disable no-restricted-globals */
/* eslint-disable no-eval */
/* eslint-disable @typescript-eslint/no-unused-vars */

(window as any).$RefreshReg$ = () => {/**/};
(window as any).$RefreshSig$ = () => () => {/**/};

import { ShellInterfaceSqlEditor } from "../../supplement/ShellInterface";
import { PrivateWorker, ExecutionResultType, IConsoleWorkerData } from "./console.worker-types";

const backend = new ShellInterfaceSqlEditor();
const ctx: PrivateWorker = self as any;

不幸的是,关于更改 babel 加载器配置的进一步讨论超出了我的范围,因为我自己没有配置它(但是,我使用的是 react-app-rewired 来配置一些自定义加载器)。
我还能尝试解决什么问题?

最佳答案

你可以试试worker-plugin而不是 worker 装载机。在尝试之前,我已经遇到同样的问题很长时间 worker-plugin .

关于reactjs - 引用错误 : $RefreshReg$ is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66472945/

相关文章:

babeljs - babel-core 和 @babel/core 有什么区别?

reactjs - 如何由于第二个兄弟组件的更改而重新渲染一个兄弟组件

vue.js - 将worker-loader与vue-cli和webpack一起使用

javascript - React-Bootstrap 水平表单不起作用

javascript - 如何在 JavaScript 中使异步查询同步?

babeljs - `@babel/runtime` 和 `@babel/plugin-transform-runtime` 版本

javascript - 为 Node.js 捆绑 CommonJS 文件

javascript - 使用 ES6 箭头函数 Babelifying JavaScript 模块模式

reactjs - const Vs 函数在 React Typescript 中创建组件

javascript - 在 Reactjs 中映射数组对象