使用Webpack 5为Next.js配置文件加载器选项

yc0p9oo0  于 2022-11-13  发布在  Webpack
关注(0)|答案(2)|浏览(183)

我正在尝试将Nextjs应用程序从Webpack 4升级到Webpack 5。目前我使用file-loader,并在next.config.js中提供选项:

// next.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.(jpe?g|png|svg|gif|ico|eot|ttf|woff|woff2|mp4|pdf|webm|txt)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              context: '',
              outputPath: 'static',
              publicPath: '_next/static',
              name: '[path][name].[hash].[ext]',
            }
          },
        ]
      },
    ]
  }
};

根据Asset Modules指令,我应该将file-loader更改为type: 'asset/resource'。我想知道如何满足file-loader中使用的options。如何设置公共路径和文件系统路径以及文件名?
我尝试过使用outputgenerator.filename配置,但是完全不知道应该在哪里放置Next.js的公共路径和文件系统路径:

module.exports = {
  output: {
     filename: '[path][name].[hash].[ext]',
     path: path.resolve(__dirname, 'static')
  },
  module: {
    rules: [
      {
        test: /\.(jpe?g|png|svg|gif|ico|eot|ttf|woff|woff2|mp4|pdf|webm|txt)$/,
        type: 'asset/resource',
        generator: {
          filename: '_next/static/[path][name].[hash].[ext]'
        }
      },
    ]
  }
};

答案

这对我有用。

// next.config.js
module.exports = {
  webpack: (config, options) => {
    config.module.rules.push(      {
      test: /\.(jpe?g|png|svg|gif|ico|eot|ttf|woff|woff2|mp4|pdf|webm)$/,
      type: 'asset',
      generator: {
        filename: 'static/chunks/[path][name].[hash][ext]'
      },
    });

      return config;
  }
};
cidc1ykv

cidc1ykv1#

以下是Webpack 5中资产模块的正确配置:

// next.config.js
module.exports = {
    webpack: (config, options) => {
        config.module.rules.push({
            test: /\.(jpe?g|png|svg|gif|ico|eot|ttf|woff|woff2|mp4|pdf|webm|txt)$/,
            type: 'asset/resource',
            generator: {
                filename: 'static/chunks/[path][name].[hash][ext]'
            },
        });

        return config;
    }
};

注意不要在[hash][ext]之间放置句点。

oyjwcjzk

oyjwcjzk2#

您确定您已正确覆写Webpack设定吗?我预期会有next.config.js的变更,而不是webpack.config.js
这里有一篇关于在next.js中定制webpack配置的不同部分的文章:https://dev.to/marcinwosinek/how-to-add-resolve-fallback-to-webpack-5-in-nextjs-10-i6j

相关问题