#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