Webpack 5 不支持 Node.js 的 polyfill

Ran*_*huv 7 node.js npm polyfills webpack angular

我有一个适用于 Angular 和 Node.js 的 npm 包。最近,我开始在 Angular v12 项目中使用我的包。我收到如下错误:

重大更改:webpack < 5 默认情况下包含 Node.js 核心模块的 Polyfill。这已不再是这种情况。验证您是否需要此模块并为其配置一个polyfill。

我需要这些包(例如'path'),并且我无法切换到Webpack替代方案(例如'path-browserify'),因为我需要它在nodejs上工作。

错误说:

如果你想包含一个polyfill,你需要: - 添加后备 'resolve.fallback: { "path": require.resolve("path-browserify") }' - 安装 'path-browserify'

安装“path-browserify”很简单。但是,该错误并未说明在何处添加后备。我在一些帖子中发现建议我需要将其添加到 Webpack.config.js 中。但在Angular项目中,没有这个文件;添加它没有任何效果。即使有这样的文件,它也对我没有帮助,因为我是一个 npm 包,并且我无法更改使用我的应用程序中的文件。

我可以为“path”包编写一个解决方法。但是,其他软件包引发了该错误。有些包(例如,suppertest)并不意味着可以在 webpack 中工作,并且在 Angular 上运行时我没有使用它们,但由于它们在我的代码中,所以 webpack 仍然会引发此错误。我还使用其他软件包,这些软件包本身使用有问题的软件包,例如“路径”或“流”,并且我无法更改它们。如何解决这个问题?

fel*_*osh -1

正如错误所述,您应该添加resolve.fallback: { "path": require.resolve("path-browserify") }到您的 webpack 配置文件中。

// webpack.config.js

module.export = {
  ...
  resolve: {
    fallback: {
      path: require.resolve("path-browserify")
    }
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 就像OP一样,我正在使用Angular。问题是“webpack.config.js”位于/node-modules/下,不应修改(例如,下次更新“webpack”时更改将被删除)。我不知道如何继续。 (2认同)