I'm trying to configure
https://github.com/VanquisherMe/with-nextjs-antd-app/blob/master/next.config.js#L28
I need to load it on demand ,‘less’ mode
https://github.com/VanquisherMe/with-nextjs-antd-app/blob/master/.babelrc#L9
I tried many times but I didn't get it right
I have ever seen
https://github.com/zeit/next.js/tree/canary/examples/with-ant-design-less
But this is not for the project
I need an example
@afc163
https://github.com/VanquisherMe/with-nextjs-antd-app/blob/master/next.config.js#L18
nextjs + antd ,open cssModules ,The class of antd is converted
Problems in this
You can give it a try
https://github.com/VanquisherMe/with-nextjs-antd-app
@afc163
I'm looking forward to the
1 can use less and customize topics
2 Antd loads less on demand
3 enable CSS module, antd class is not converted
I tried it many times, no results, and I needed an example
You can try this example and open CSS module
https://github.com/zeit/next.js/tree/canary/examples/with-ant-design-less
this is not for the project
@VanquisherMe May be you need this:https://www.yuque.com/steven-kkr5g/aza/ig3x9w
@sdli It changes config too much!
I already successfully customized theme as the following simple way:
next.config.js
const withCSS = require('@zeit/next-css')
const withSass = require('@zeit/next-sass')
const withLess = require('@zeit/next-less')
const isProd = process.env.NODE_ENV === 'production'
// fix: prevents error when .less files are required by node
if (typeof require !== 'undefined') {
require.extensions['.less'] = file => { }
}
module.exports = withLess(withSass(withCSS({
lessLoaderOptions: {
javascriptEnabled: true
}
})))
css/antd.less
@import "~antd/dist/antd.less";
@primary-color: #C02428;
pages/_app.js
import React from 'react'
import App from 'next/app'
import { Provider } from 'react-redux'
import withReduxStore from '../lib/with-redux-store'
import '../css/antd.less'
class WgApp extends App {
render() {
const { Component, pageProps, store } = this.props
return (
<Provider store={store}>
<Component {...pageProps} />
</Provider>
)
}
}
export default withReduxStore(WgApp)
But I found the code size of page is very big (6.1 MB).
So it's very needed to load antd component on demand. I tried to transplant the official way in nextjs, but not succeed.
@jaggerwang See update for less-loader tools, and I have made a npm package to reduce the redundancy。https://www.yuque.com/steven-kkr5g/aza/ig3x9w
Anybody know how to fix this error ?
I have followed the guides to integrate less
@koolamusic See https://github.com/zeit/next.js/issues/6181
@stephankaag I have fixed my issues, come of my bottleneck came from fact that I was implementing a custom server together with next-routes, this affected the manner in which the less modules were loaded
@koolamusic is your solution open source? I'm running into this as well.
Lemme send a repo
Thanks @koolamusic! Really stuck on what seems like it should be a pretty simple issue. But then again, they always seem simple... 😄
@timneutkens I could add an example with antd using a custom express server and next routes, right ?
@jaggerwang thx
Hi, my config for css-modules, typescript and antd design, tried to make the best..
const withTypescript = require("@zeit/next-typescript");
const withCss = require("@zeit/next-css");
const withSass = require('@zeit/next-sass')
const withLess = require('@zeit/next-less')
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
module.exports =
withTypescript(
withCss(
withSass({
cssModules: true,
...withLess({
dir: "src",
distDir: "../build",
cssLoaderOptions: {
importLoaders: 1,
localIdentName: "[folder]_[local]___[hash:base64:5]",
},
lessLoaderOptions: {
javascriptEnabled: true
},
webpack(config, options) {
if (options.isServer) {
config.plugins.push(new ForkTsCheckerWebpackPlugin({
tsconfig: '../tsconfig.json',
}))
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',
})
}
return config;
}
})
})
)
);
@lyzhovnik
Hi! this config works like a charm!
If you don't mind, Could you explain what this config does..?
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),
]
Duplicate of #9830
Hi, my config for css-modules, typescript and antd design, tried to make the best..
const withTypescript = require("@zeit/next-typescript"); const withCss = require("@zeit/next-css"); const withSass = require('@zeit/next-sass') const withLess = require('@zeit/next-less') const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); module.exports = withTypescript( withCss( withSass({ cssModules: true, ...withLess({ dir: "src", distDir: "../build", cssLoaderOptions: { importLoaders: 1, localIdentName: "[folder]_[local]___[hash:base64:5]", }, lessLoaderOptions: { javascriptEnabled: true }, webpack(config, options) { if (options.isServer) { config.plugins.push(new ForkTsCheckerWebpackPlugin({ tsconfig: '../tsconfig.json', })) 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', }) } return config; } }) }) ) );
want to know what does this part means
config.module.rules.unshift({
test: antStyles,
use: 'null-loader',
})
PS: You may get an error when building with mini-css-extract-plugin
about conflicting errors between styles.
I am able to bypass this error by lazy loading antd components within my application, An example in NextJS would be to load in this manner
const Menu = dynamic(() => import('antd/lib/menu'))
const MenuItem = dynamic(() => import('antd/lib/menu/MenuItem'))
Here I can use the Menu and Menu Item from antd in place or the import {Menu} from 'antd'
syntax where MenuItem
is Menu.Item
So far no issues with Conflicting order between styles"
This applies if you are using less and the babel-import-plugin
Most helpful comment
@VanquisherMe May be you need this:https://www.yuque.com/steven-kkr5g/aza/ig3x9w