首页 > 解决方案 > 未捕获的 ReferenceError:未定义缓冲区

问题描述

我们的应用程序一直在标题中显示错误。该问题很可能与 Webpack 5 polyfill 有关,并且在经历了几个解决方案之后:

  1. 使用 npm 设置回退 + 安装
fallback: {
  "stream": require.resolve("stream-browserify"),
  "buffer": require.resolve("buffer/")
}
  1. 设置别名
alias: {
  "buffer": "buffer",
  "stream": "stream-browserify"
}

我们仍然看到可怕的错误:

rfc6979.js:3 Uncaught ReferenceError: Buffer is not defined
    at Object.4142 (rfc6979.js:3)
    at r (bootstrap:19)
    at Object.5892 (js.js:4)
    at r (bootstrap:19)
    at Object.4090 (bip32.js:5)
    at r (bootstrap:19)
    at Object.7786 (index.js:3)
    at r (bootstrap:19)
    at Object.1649 (MnemonicKey.js:50)
    at r (bootstrap:19)

我们的设置是用于多目标的 vanilla NodeJS + TypeScript + Webpack:节点 + 浏览器。任何帮助都会很棒!

标签: node.jswebpack

解决方案


回答我自己的问题。有两件事有助于解决这个问题:

  1. 将带有 ProviderPlugin 的插件部分添加到 webpack.config.js
const webpack = require('webpack');

module.exports = {
    // ...

    plugins: [
        // Work around for Buffer is undefined:
        // https://github.com/webpack/changelog-v5/issues/10
        new webpack.ProvidePlugin({
            Buffer: ['buffer', 'Buffer'],
        }),
        new webpack.ProvidePlugin({
            process: 'process/browser',
        }),
    ],

  1. 还将 resolve.fallback 添加到 webpack.config.js 中:
    resolve: {
        extensions: [ '.ts', '.js' ],
        fallback: {
            "stream": require.resolve("stream-browserify"),
            "buffer": require.resolve("buffer")
        }
    },


推荐阅读