Angular 17 中的插件(未处理方案)不处理从“node:fs/promises”读取

问题描述 投票:0回答:1

应用程序在运行

ng serve
ng build
时运行良好。但是当我运行
ng test
时,它会抛出以下错误:

node:fs/promises - Error: Module build failed: UnhandledSchemeError: Reading from "node:fs/promises" is not handled by plugins (Unhandled scheme).
Webpack supports "data:" and "file:" URIs by default.
You may need an additional plugin to handle "node:" URIs.

node:fs - Error: Module build failed: UnhandledSchemeError: Reading from "node:fs" is not handled by plugins (Unhandled scheme).
Webpack supports "data:" and "file:" URIs by default.
You may need an additional plugin to handle "node:" URIs.

node:path - Error: Module build failed: UnhandledSchemeError: Reading from "node:path" is not handled by plugins (Unhandled scheme).
Webpack supports "data:" and "file:" URIs by default.
You may need an additional plugin to handle "node:" URIs.

node:url - Error: Module build failed: UnhandledSchemeError: Reading from "node:url" is not handled by plugins (Unhandled scheme).
Webpack supports "data:" and "file:" URIs by default.
You may need an additional plugin to handle "node:" URIs.

我问过GPT并在网上搜索过。这是我检查过的:

“删除‘node:’并只使用‘fs’、‘path’等。”

那些“node:xxx”甚至不存在于我的代码库中。所以这行不通。我确实在我的几个依赖项中找到了它们,但我无法修改它们。

“修改你的 webpack.conf.js”

我使用的是 Angular 17,所以我什至没有 webpack.conf.js。然而,当我创建一个应用程序并在那里进行一些修改时,该应用程序本身就崩溃了。

“检查您的 webpack 版本,可能存在版本不一致。”

查了一下,只有一个版本:5.9.4。

围绕此提出的大多数问题都在其

ng serve
ng build
中存在问题,因此他们的某些解决方案对我不起作用。如果这很重要的话,我正在使用 Karma 进行自动测试。

node.js angular webpack karma-jasmine
1个回答
0
投票

我在使用 next.js 时遇到了同样的问题,将此 webpack 配置添加到您的下一个配置文件中,在我的情况下它有效,如果您正在使用任何其他 webpack 相关配置,请尝试采用:

webpack: (config, { webpack }) => {
      config.experiments = { ...config.experiments, topLevelAwait: true };
      config.externals["node:fs"] = "commonjs node:fs";
      config.resolve.fallback = {
        ...config.resolve.fallback,
        fs: false,
    };
      config.plugins.push(

        new webpack.NormalModuleReplacementPlugin(
          /^node:/,
          (resource) => {
            resource.request = resource.request.replace(/^node:/, '');
          },
        ),
      );
  
      return config;
   }

它支持顶级等待等现代功能,外部化 fs 等 Node.js 模块,并通过删除 node: 前缀来调整模块导入以实现兼容性。

© www.soinside.com 2019 - 2024. All rights reserved.