-1

下面粘贴的是我在 nextjs 中使用指向本地路由的链接时收到的节点:缓冲区错误。有谁知道如何解决这个问题?

我看到了:https ://github.com/vercel/next.js/discussions/33982

谢谢!

节点:缓冲区模块构建失败:UnhandledSchemeError:插件不处理从“节点:缓冲区”读取(未处理方案)。Webpack 默认支持 "data:" 和 "file:" URI。您可能需要一个额外的插件来处理“node:”URI。

4

1 回答 1

1

所以我也遇到了这个问题 - 上面的讨论将您链接到文件类型,这实际上是我最终找到答案的地方。

首先,我现在使用 react-app-rewired - 这允许我在不弹出项目的情况下更改 webpack 配置。这是安装的第一件事。还有其他软件包也可以做到这一点,有些人担心这个重新布线的软件包只是由社区“轻微”维护。

然后,您需要在项目的根目录中创建一个名为“config-overrides.js”的文件

这就是我文件中的内容。它涵盖了 node:buffer 以外的一些东西,因为我还需要其他东西(比如 fs 和流)。我相信您可以根据需要对其进行修改:

const webpack = require("webpack");

module.exports = function override(config, env) {
    config.resolve.fallback = {
        url: require.resolve("url"),
        fs: require.resolve("graceful-fs"),
        buffer: require.resolve("buffer"),
        stream: require.resolve("stream-browserify"),
    };
    config.plugins.push(
        new webpack.ProvidePlugin({
            process: "process/browser",
            Buffer: ["buffer", "Buffer"],
        }),
        new webpack.NormalModuleReplacementPlugin(/node:/, (resource) => {
            const mod = resource.request.replace(/^node:/, "");
            switch (mod) {
                case "buffer":
                    resource.request = "buffer";
                    break;
                case "stream":
                    resource.request = "readable-stream";
                    break;
                default:
                    throw new Error(`Not found ${mod}`);
            }
        }),
    );
    config.ignoreWarnings = [/Failed to parse source map/];

    return config;
};

您需要确保安装了您在该文件中使用的软件包,例如

npm install url graceful-fs buffer stream-browserify --save

之后,我将 package.json 中的“脚本”区域更改为如下:

"scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "eject": "react-scripts eject"
}

然后我的包正确编译并运行良好。

于 2022-02-15T16:16:44.803 回答