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

React Draft Wysiwyg集成报错:Uncaught TypeError: setImmediate is not a function

解决React Draft Wysiwyg在Vite环境下的"setImmediate is not a function"错误

问题场景

使用React Draft Wysiwyg富文本编辑器,结合Laravel + Vite + React技术栈,编辑器实现代码如下:

export default function TextEditor() {
    const [editorState, setEditorState] = useState(() =>
        EditorState.createEmpty()
    );

    const handleEditorState = editorState => {
        setEditorState(editorState);
    };

    return (
        <Editor
            editorState={editorState}
            toolbarClassName="toolbarClassName"
            wrapperClassName="wrapperClassName"
            editorClassName="editorClassName"
            onEditorStateChange={handleEditorState}
        />
    );
}

Vite配置文件vite.config.js如下:

plugins: [
    laravel({
        input: "resources/js/app.jsx",
        ssr: "resources/js/ssr.jsx",
        refresh: true,
    }),
    react(),
],
define: {
    global: {},
},

运行后控制台抛出错误:Uncaught TypeError: setImmediate is not a function

解决方案

方案1:直接在Vite配置中全局映射setImmediate

修改vite.config.js的define配置,将setImmediate映射为浏览器支持的setTimeout:

plugins: [
    laravel({
        input: "resources/js/app.jsx",
        ssr: "resources/js/ssr.jsx",
        refresh: true,
    }),
    react(),
],
define: {
    global: {
        setImmediate: "setTimeout"
    },
},

方案2:使用Node全局变量Polyfill插件

如果后续还遇到其他Node.js API缺失的问题,可安装专用polyfill插件:

  1. 安装依赖:
npm install @esbuild-plugins/node-globals-polyfill --save-dev
  1. 修改vite.config.js:
import { NodeGlobalsPolyfillPlugin } from '@esbuild-plugins/node-globals-polyfill';

export default defineConfig({
    plugins: [
        laravel({
            input: "resources/js/app.jsx",
            ssr: "resources/js/ssr.jsx",
            refresh: true,
        }),
        react(),
    ],
    optimizeDeps: {
        esbuildOptions: {
            define: {
                global: 'globalThis',
            },
            plugins: [
                NodeGlobalsPolyfillPlugin({
                    process: true,
                    buffer: true,
                    setImmediate: true
                }),
            ],
        },
    },
});

原因说明

setImmediate是Node.js环境专属API,浏览器原生不支持。React Draft Wysiwyg依赖的底层库(如draft-js)内部使用了该API,而Vite默认不会为浏览器环境注入Node.js全局API的polyfill,因此需要手动配置补全缺失的函数。

内容的提问来源于stack exchange,提问作者Naung Ye Htet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:16:16