未捕获的 ReferenceError:全局未在 Object../node_modules/fbjs/lib/setImmediate.js 中定义

IT技术 reactjs typescript webpack electron
2022-07-09 00:03:48

当我尝试在我的 Electron 项目中从 ant 设计中渲染 Button 时出现此错误,但它没有渲染任何内容。当我从按钮更改为只是 Hello World 文本时,它可以工作。

我不确定错误是来自 webpack 还是 ant 设计本身。

注意:我自己手动创建了这个项目,但是错误可以在 https://github.com/Devtography/electron-react-typescript-webpack-boilerplate 上重现,但在https://github.com/Robinfr/没有错误电子reacttypescript

错误信息

Uncaught ReferenceError: global is not defined
    at Object../node_modules/fbjs/lib/setImmediate.js (renderer.js:58171)
    at __webpack_require__ (renderer.js:20)
    at Object../node_modules/draft-js/lib/editOnBeforeInput.js (renderer.js:49367)
    at __webpack_require__ (renderer.js:20)
    at Object../node_modules/draft-js/lib/DraftEditorEditHandler.js (renderer.js:45296)
    at __webpack_require__ (renderer.js:20)
    at Object../node_modules/draft-js/lib/DraftEditor.react.js (renderer.js:44011)
    at __webpack_require__ (renderer.js:20)
    at Object../node_modules/draft-js/lib/Draft.js (renderer.js:43920)
    at __webpack_require__ (renderer.js:20)

webpack.config.js

const path = require("path");

const config = {
  target: "electron-main",
  devtool: "source-map",
  entry: "./src/main.ts",
  output: {
    filename: "main.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /\.(ts|tsx)$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      }
    ]
  },
  resolve: {
    extensions: [".ts", ".tsx", ".js"]
  },
  node: {
    __dirname: false,
    __filename: false
  }
};

module.exports = (env, argv) => {
  return config;
};

webpack.react.config.js

const path = require("path");
const HtmlWebPackPlugin = require("html-webpack-plugin");

const htmlPlugin = new HtmlWebPackPlugin({
  template: "./src/index.html",
  filename: "./index.html"
});

const config = {
  target: "electron-renderer",
  devtool: "source-map",
  entry: "./src/app/renderer.tsx",
  output: {
    filename: "renderer.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /\.(ts|tsx)$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      },
      {
        test: /\.css$/,
        loaders: ['style-loader', 'css-loader']
      }
    ]
  },
  resolve: {
    extensions: [".ts", ".tsx", ".js"]
  },
  plugins: [htmlPlugin]
};

module.exports = (env, argv) => {
  return config;
};
3个回答

只是为提供的答案添加一些上下文,将其添加到 index.html 文件中(在标记内):

<script>
  const global = globalThis;
</script>

这与https://github.com/facebook/fbjs/issues/290有关。

global通过在 上添加一个对象来修复它window

(window as any).global = window;

有同样的问题,我在执行任何脚本之前做了什么:

global = globalThis;