在 NextJS 应用程序中将 swr 从版本 1 升级到版本 2 时出现共享模块警告

Shared module warning when upgrading swr from version 1 to version 2 in a NextJS app

提问人:myverdict 提问时间:9/9/2023 更新时间:9/13/2023 访问量:37

问:

我正在将我的 swr 软件包从当前版本 1 升级到最新版本 2。下面是我的.我正在使用 React 18、NextJS 12 和 Webpack 5。该项目集成了 ModuleFederationPlugin。package.json

{
  "scripts": {...},
  "dependencies": {
    ...
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "next": "12.2.2",
    "swr": "^2.2.2",
    "webpack": "^5.78.0",
    ...
  }
  "devDependencies": {...}
}

下面是我为 ModuleFederationPlugin 共享的 swr 项:next.config.js

// eslint-disable-next-line import/no-extraneous-dependencies
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');
const deps = require('./package.json').dependencies;

module.exports = {
  basePath: process.env.BASE_PATH,
  reactStrictMode: true,
  env: {...},
  webpack(config) {
    config.module.rules.push({
      test: /\.svg$/,
      use: ['@svgr/webpack'],
    });

    config.plugins.push(
      new ModuleFederationPlugin({
        name: 'someName',
        exposes: {},
        shared: [
          {
            react: {
              singleton: true,
              requiredVersion: deps.react,
              eager: true,
            },
            'react-dom': {
              singleton: true,
              requiredVersion: deps['react-dom'],
              eager: true,
            },
            'swr/': {
              // requiredVersion: deps.swr,
              requiredVersion: '^2.2.2',
              eager: true,
            },
            ...
          },
        ],
      }),
    );

    return config;
  },
};

当我升级我的 swr 软件包时,我收到以下警告:

warn  - shared module /Users/nextjs-app/node_modules/swr/_internal/dist/index.mjs -> /Users/nextjs-app/node_modules/swr/_internal/dist/index.mjs
No version specified and unable to automatically determine one. No version in description file (usually package.json). Add version to description file /Users/nextjs-app/node_modules/swr/_internal/package.json, or manually specify version in shared config.

因此,我像这样更改了 ModuleFederationPlugin 中 swr 的共享路径(请参阅上面的文件以获取完整的配置:next.config.js

'swr/': {
  // requiredVersion: deps.swr,
  requiredVersion: '^2.2.2',
  eager: true,
},

将 swr 设置为或不修复警告。警告仍然重复出现。我还尝试使用and设置属性名称,但这也不起作用。deps.swr'^2.2.2'swrswr/

有关如何解决此问题的任何帮助将不胜感激。

请参阅此处的 SWR 2.0 文章:https://swr.vercel.app/blog/swr-v2

webpack next.js 警告 webpack-5 swr

评论


答:

0赞 myverdict 9/13/2023 #1

添加以下更新后,警告将消失。在文件中,将 swr 更新为:next.config.js

'swr/*': {
  singleton: true,
  requiredVersion: deps.swr,
  eager: true,
},

修复警告后添加通配符。*swr/*