NextJS 中使用 antd, 开启 cssModules 后, antd 样式就没有了,怎么解决?

2020-09-04 18:00:05 +08:00
 marktrains
const withLess = require('@zeit/next-less')

module.exports = withLess({
    cssModules: true,
    lessLoaderOptions: {
        javascriptEnabled: true
     }
})

antd 是不需要开启 cssModules 的,那么 NextJS 中如何处理 antd 不开启 cssModules,而其他开启呢?

1908 次点击
所在节点    JavaScript
3 条回复
marktrains
2020-09-04 18:01:19 +08:00
请教一下各位大佬
duan602728596
2020-09-04 19:20:05 +08:00
const nextConfig = withLess({
webpack(config, options) {
// config.module.rules
// 在 rules 里面找到 less 文件的 loader,添加 exclude,忽略 node_modules 目录内的文件


// antd 的 less-loader
const { rules } = config.module;
const { use } = rules[rules.length - 1];
const loaders = options.isServer
? ['css-loader/locals']
: [isDev ? 'style-loader' : use[0], 'css-loader'];

config.module.rules.push({
test: /.*\.less$/,
use: [
...loaders,
{
loader: 'less-loader',
options: {
lessOptions: {
javascriptEnabled: true
}
}
}
],
include: []
});

if (options.isServer) {
// antd 打包,而不是使用 node 的 require 方法引入,然后可以配置 antd 的按需加载
const externalsFunc = config.externals[config.externals.length - 1];

config.externals[config.externals.length - 1] = function(context, request, callback) {
if (/(antd|rc-|css-animation|@ant-design|highlight)/i.test(request)) {
return callback();
}

return externalsFunc(context, request, callback);
};
} else {
config.node = {
fs: 'empty',
path: 'empty'
};
}


return config;
}
});

你可以试一试
marktrains
2020-09-04 20:14:52 +08:00
@duan602728596 非常感谢大佬的指导,这就试试。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/704295

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX