How to apply antd dark theme for a React App?
The previous answers weren't working for me. This is what worked for me if it helps anybody else. I think it's due to the new less loader version and/or a change in how antd is packaged (I am really not sure).
const { getThemeVariables } = require("antd/dist/theme");
const { override, fixBabelImports, addLessLoader } = require("customize-cra");
module.exports = override(
fixBabelImports("import", {
libraryName: "antd",
libraryDirectory: "es",
style: true,
}),
addLessLoader({
lessOptions: {
javascriptEnabled: true,
modifyVars: {
...getThemeVariables({
dark: true,
compact: true, // optional
}),
},
},
})
);
The code is destructuring the default export when the default export is the object with the variables. Therefore, it should be:
const darkTheme = require('@ant-design/dark-theme').default;
const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
modifyVars: darkTheme
}),
);
If you console log darkTheme
variable which has been imported, all the styling variables are present within darkTheme.default
object. I have implemented their aliyum-theme
.
So for you code to work, you need to change modifyVars
within config-overrides.js
file to
const { darkTheme } = require('@ant-design/dark-theme');
const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
modifyVars: {...darkTheme.default}
}),
);
ProTip: To override darkTheme within the application, you can create your own javascript file and import it within config-overrides.js
file and destructure within modifyVars
The solution that worked for me was a combination of both @JoseFelix and @Anujs answers. Thank you both for the answers:
const darkTheme = require('@ant-design/dark-theme');
const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
modifyVars: darkTheme.default
}),
);