как настроить поддержку antd less с nextjs 12

#next.js #less #antd

Вопрос:

я пытаюсь настроить nextjs 12 с помощью ant design antd и в next.config.js когда я пытаюсь настроить withAntdLess, он выдает ошибку типа

У типа ‘{}’ отсутствуют следующие свойства из типа ‘{ esModule: boolean; sourceMap: boolean; модули: { mode: строка; }; }’: esModule, sourceMap, модули

хотя все реквизиты являются необязательными в соответствии с документами next-plugin-antd-less

next.config.js файл:

 // @ts-check
// next.config.js
const withAntdLess = require('next-plugin-antd-less');
/**
 * @type {import('next').NextConfig}
 **/

 
module.exports =withAntdLess({
  cssLoaderOptions: {},

  // Other Config Here...

  webpack(config) {
    return config;
  },

  
  reactStrictMode: true,
});
 

Ответ №1:

Я решил это с помощью next-with-less https://github.com/elado/next-with-less

next.config.js

 const withLess = require('next-with-less');
const lessToJS = require('less-vars-to-js');

const themeVariables = lessToJS(
  fs.readFileSync(
    path.resolve(__dirname, './public/styles/custom.less'),
    'utf8'
  )
);

module.exports = withLess({
...
lessLoaderOptions: {
    lessOptions: {
      javascriptEnabled: true,
      modifyVars: themeVariables, // make your antd custom effective
      localIdentName: '[path]___[local]___[hash:base64:5]',
    },
  },
...
})
 

Импортируйте свой пользовательский файл less поверх файла _app.jsx

 import 'public/styles/custom.less';
...
 

Импортируйте файл Antd less по умолчанию в свой пользовательский файл less: (в моем случае public/styles/custom.less )

 @import "~antd/dist/antd.less";
....
 

Дополнительные примечания:
Если у вас есть старая реализация Antd, вам следует удалить интеграцию в вашем .babelrc

 [
      "import",
      {
        "libraryName": "antd",
        "libraryDirectory": "lib",
        "style": true
      }
    ],
 

Если у вас есть старая реализация Antd, вам следует удалить интеграцию в вашей зоне webpack в вашем next.config.js

 if (isServer) {
      const antStyles = /antd/.*?/style.*?/;
      const origExternals = [...config.externals];
      config.externals = [
        (context, request, callback) => {
          if (request.match(antStyles)) return callback();
          if (typeof origExternals[0] === 'function') {
            origExternals[0](context, request, callback);
          } else {
            callback();
          }
        },
        ...(typeof origExternals[0] === 'function' ? [] : origExternals),
      ];
      config.module.rules.unshift({
        test: antStyles,
        use: 'null-loader',
      });
    }
 

Комментарии:

1. я решил это, проигнорировав предупреждение, используя @ts-ignore