antd样式按需加载

2019-05-28  本文已影响0人  秉持本心

今天在项目中用antd的时候发现antd样式无效,经过检查发现是因为我项目中用到了css modules。如果项目中只是引入antd.css,那么根据官网步骤配置webpack是不会有问题的。但是如果项目中同时引入css modules和按需引入antd,那么就会导致antd样式无效。

1.首先我项目中的配置是这样的
/*
  webpack.config.js中的配置
**/
module: { // 这里配置Babel
    rules: [
      {
        test: /(\.jsx|\.js)$/,
        use: {
          loader: "babel-loader"
        },
        exclude: /node_modules/
      }, 
      { // 这里配置这两个工具
        test: /\.css$/,
        exclude: /node_modules/,
        use: [
          {
            loader: "style-loader"
          }, {
            loader: "css-loader",
            options: {
              modules: true, // 指定启用css modules
              importLoaders: 1,
              localIdentName: '[name]__[local]--[hash:base64:5]'
            }
          }
        ]
      }
   ]
}
/*
  .babelrc中的配置
**/
{
  "presets": ["react", "env", "stage-0"],
  "env": {
    "development": {
      "plugins": [["react-transform", {
        "transforms": [{
          "transform": "react-transform-hmr",
          
          "imports": ["react"],
          
          "locals": ["module"]
        }]
      }]]
    }
  }
}
2.根据antd design 官网按需引入antd
npm install babel-plugin-import --save-dev
yarn add babel-plugin-import
"plugins": [
    ["import", {
      "libraryName": "antd",
      "libraryDirectory": "es",
      "style": "css"  // style: true 会加载 less 文件
    }]
  ]
{
  "presets": ["react", "env", "stage-0"],
  "env": {
    "development": {
      "plugins": [["react-transform", {
        "transforms": [{
          "transform": "react-transform-hmr",
          
          "imports": ["react"],
          
          "locals": ["module"]
        }]
      }]]
    }
  },
  "plugins": [
    ["import",{
      "libraryName": "antd",
      "libraryDirectory": "es",
      "style": "css"}] // antd按需加载
  ]
}
3.但是这样配置还是和antd的不一样,需要添加如下配置
//antd样式处理
{
   test:/\.css$/,
   exclude:/src/,
   use:[
     { 
      loader: "style-loader"},
       {
         loader: "css-loader",
         options:{
           importLoaders:1
        }
      }
   ]
}
module: { // 这里配置Babel
    rules: [
      {
        test: /(\.jsx|\.js)$/,
        use: {
          loader: "babel-loader"
        },
        exclude: /node_modules/
      }, { // 这里配置这两个工具
        test: /\.css$/,
        exclude: /node_modules/,
        use: [
          {
            loader: "style-loader"
          }, {
            loader: "css-loader",
            options: {
              modules: true, // 指定启用css modules
              importLoaders: 1,
              localIdentName: '[name]__[local]--[hash:base64:5]'
            }
          }
        ]
      }, { // antd样式处理
        test:/\.css$/,
        exclude:/src/,
        use:[
          { loader: "style-loader"},
          {
            loader: "css-loader",
            options:{
              importLoaders:1
            }
          }
        ]
      }
    ]
}
上一篇下一篇

猜你喜欢

热点阅读