Docusaurus 2 应用程序试图解决开发依赖性

Docusaurus 2 App trying to resolve dev dependencies

我有一个 Docusaurus 2(使用版本 2.0.0-beta.9)应用程序,我正在使用 msw 编写一些测试。测试工作正常问题是当 运行 npm start(运行 docusaurus start)时,我看到 docusaurus 试图解决 msw 依赖关系,这没有意义,因为我只是从测试文件中引用此依赖项。是否可以排除由 docusaurus 拥有的底层 webpack 配置处理的 msw 开发依赖?

这是日志

> website@0.0.0 start
> docusaurus start --host 0.0.0.0

Starting the development server...
Docusaurus website is running at: http://localhost:3000/

✖ Client
  Compiled with some errors in 6.34s

ℹ 「wds」: Project is running at http://0.0.0.0:3000/
ℹ 「wds」: webpack output is served from /
ℹ 「wds」: Content not from webpack is served from /Users/danielcaldas/code/my-project/website
ℹ 「wds」: 404s will fallback to /index.html


Module not found: Error: Can't resolve 'util' in '/Users/danielcaldas/code/my-project/website/node_modules/@mswjs/interceptors/lib/interceptors/ClientRequest'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
    - add a fallback 'resolve.fallback: { "util": require.resolve("util/") }'
    - install 'util'
If you don't want to include a polyfill, you can use an empty module like this:
    resolve.fallback: { "util": false }
Module not found: Error: Can't resolve 'http' in '/Users/danielcaldas/code/my-project/website/node_modules/@mswjs/interceptors/lib/interceptors/ClientRequest'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

编辑

这是我目前的解决方法。因此,在此过程中会弹出更多错误。我在本地安装了这些后备缺少的依赖项,并在我的 node_modules 中手动编辑了 docusaurus 的 webpack 配置(我知道不是很好...),

node_modules/@docusaurus/core/lib/webpack/base.js有以下内容:

{
    // ...
    resolve: {
        // ...
        fallback: {
          assert: require.resolve('assert/'),
          http: require.resolve('stream-http'),
          https: require.resolve('https-browserify'),
          os: require.resolve('os-browserify/browser'),
          stream: require.resolve('stream-browserify'),
          timers: require.resolve('timers-browserify'),
          tty: require.resolve('tty-browserify'),
          zlib: require.resolve('browserify-zlib'),
        }
    },
    // ...
}

编辑 2

好像docusuarus webpack在文件夹__test__下扫描!将 __test__ 重命名为 __tests__ 解决了这个问题,没有破解 webpack 配置。


任何帮助将不胜感激!谢谢!

我建议检查您是否没有在主 Docusaurus 代码中导入 msw。仅当您在浏览器中使用 MSW 进行模拟时,这才相关。尽管如此,在项目的源文件中快速 Cmd+F 应该就足够了。

如果您觉得您的测试文件是由 Docusaurus build 处理的,请仍然检查是否存在可疑导入。 @mswjs/interceptors 依赖项导入确实从某处出现,因此很可能存在导入 msw/node 或其他模块的代码。密切关注导入,特别是如果您使用自定义模块结构来启用模拟(即单个 mocks/index.js 文件 returns 正确的 setupWorker/setupServer 基于进口商的环境)。