如何使用Antd / Less和Sass / CSS模块配置Next.js

JustTB

我想将Next.js与Sass和CSS模块一起使用,但也想使用Ant Design,并希望将Less样式用于较小的建筑物。

我能够启用CSS模块或Less loader,但不能同时启用两者。Next.js的示例无法帮助我解决该问题。

JustTB

经过数小时的研究,我终于找到了正确的解决方案,并希望与您分享:

.babelrc (这里没有魔术)

{
  "presets": ["next/babel"],
  "plugins": [
    [
      "import",
      {
        "libraryName": "antd",
        "style": true
      }
    ]
  ]
}

next.config.js

/* eslint-disable */
const withLess = require('@zeit/next-less');
const withSass = require('@zeit/next-sass');
const lessToJS = require('less-vars-to-js');
const fs = require('fs');
const path = require('path');

// Where your antd-custom.less file lives
const themeVariables = lessToJS(
  fs.readFileSync(path.resolve(__dirname, './assets/antd-custom.less'), 'utf8')
);

module.exports = withSass({
  cssModules: true,
  ...withLess({
    lessLoaderOptions: {
      javascriptEnabled: true,
      modifyVars: themeVariables, // make your antd custom effective
      importLoaders: 0
    },
    cssLoaderOptions: {
      importLoaders: 3,
      localIdentName: '[local]___[hash:base64:5]'
    },
    webpack: (config, { isServer }) => {
      //Make Ant styles work with less
      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'
        });
      }
      return config;
    }
  })
});

最后提示如何编写withSass withLess使用和把cssModules: true外物从该评论是在这里

虽然我已经在尝试从前面的示例中得出的不同组合:next + ant + less next + sass

为了完成这里我的依赖package.json

...
"dependencies": {
    "@zeit/next-less": "^1.0.1",
    "@zeit/next-sass": "^1.0.1",
    "antd": "^4.1.3",
    "babel-plugin-import": "^1.13.0",
    "less": "^3.11.1",
    "less-vars-to-js": "^1.3.0",
    "next": "^9.3.4",
    "node-sass": "^4.13.1",
    "null-loader": "^3.0.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "sass": "^1.26.3"
  }
...

我希望这可以帮助其他人更快地找到此解决方案。:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以在webpack中构建sass / less / css而不在JS中要求它们吗?

如何在Scala.js中使用AngularJS的模块配置?

Sass与CSS模块和Webpack

在将CSS模块与SASS结合使用时,如何配置WebStorm以识别kebab-case类名称

如何在create-react-app中使用Sass和CSS模块?

尝试使用Sass和next.config.js集成Ant Design无效

Next.js有没有办法在添加更少的配置的同时启用内置的css-sass?

Webpack加载器配置为React JS加载CSS和SASS文件

如何使用自定义主题和支持CSS模块功能在Next.js中配置Ant Design

如何配置汇总和PostCSS以捆绑LESS和CSS(Tailwind)

使用CSS模块的Next.JS无法正常工作

我如何配置Storybook.js Webpack以在Next.js项目的CSS模块中使用绝对图像路径?

如何使用Next.js,Ant Design,Less和TypeScript配置Storybook.js Webpack

使用Node.sass和Node.js将scss编译为CSS

如何使用js和CSS创建库?

使用CSS模块定位next.js中的Pure元素

如何在不使用标题钩的情况下从模块添加JS和CSS标签

Angular.js,如何配置模块?

如何使LESS结合CSS规则和逗号

如何在SASS和LESS中定义Web字体

如何在Django中使用Sass以及如何对CSS和JS资产进行版本控制以消除缓存

使用 webpack 和 React 在开发/生产中配置 CSS 模块

VueJs 的最佳实践使用 laravel 混合和放置 app.js 与 bootstrap 和 app.css 来自 sass

如何在 next.js 中使用 sass

有没有办法将 react-bootstrap (Sass) 导入 Next.js 中的 css/scss 模块?

如何在 next.js >= 9.3 配置中配置全局和本地样式表?

如何使用 next js 配置 redux?

如何从 Next.js 中的 css 模块导入样式表?

在 Antd 和 CRA 中使用 sass