JavaScript

超轻量级php框架startmvc

详解在create-react-app使用less与antd按需加载

更新时间:2020-08-08 04:00:01 作者:startmvc
使用antd按需加载使用react-app-rewired对create-react-app的默认配置进行自定义1、yarnaddreact-app-rewir

使用antd按需加载

使用react-app-rewired对 create-react-app 的默认配置进行自定义

1、yarn add react-app-rewired --dev


/* package.json */
"scripts": {
- "start": "react-scripts start",
+ "start": "react-app-rewired start",
- "build": "react-scripts build",
+ "build": "react-app-rewired build",
- "test": "react-scripts test --env=jsdom",
+ "test": "react-app-rewired test --env=jsdom",
}

2.然后在项目根目录创建一个 config-overrides.js 用于修改默认配置。


module.exports = function override(config, env) {
 // do stuff with the webpack config...
 return config;
};

使用 babel-plugin-import

babel-plugin-import 是一个用于按需加载组件代码和样式babel 插件(原理),现在我们尝试安装它并修改config-overrides.js 文件

1.yarn add babel-plugin-import --dev


+ const { injectBabelPlugin } = require('react-app-rewired');

 module.exports = function override(config, env) {
+ config = injectBabelPlugin(['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }], config);
 return config;
 };

或者也可修改


{
 test: /\.(js|jsx|mjs)$/,
 include: paths.appSrc,
 loader: require.resolve('babel-loader'),
 options: {
 plugins: [
 ['import', { libraryName: 'antd', style: true }],
 ],
 // This is a feature of `babel-loader` for webpack (not Babel itself).
 // It enables caching results in ./node_modules/.cache/babel-loader/
 // directory for faster rebuilds.
 cacheDirectory: true,
 },
 },

自定义主题

yarn add react-app-rewire-less --dev


 const { injectBabelPlugin } = require('react-app-rewired');
+ const rewireLess = require('react-app-rewire-less');

 module.exports = function override(config, env) {
- config = injectBabelPlugin(['import', { libraryName: 'antd', style: 'css' }], config);
+ config = injectBabelPlugin(['import', { libraryName: 'antd', style: true }], config);
+ config = rewireLess.withLoaderOptions({
+ modifyVars: { "@primary-color": "#1DA57A" },
+ })(config, env);
 return config;
 };

参考链接:https://ant.design/docs/react/use-with-create-react-app-cn

使用less

如果已经配置react-app-rewire-less,则无需再进行此操作

1.npm install less-loader less --save-dev 2.修改node_modules/react_script/config下的webpack.config.dev.js 和 webpack.config-prod.js 配置文件

  • test: /.css$/ 改为 /.(css|less)$/
  • test: /.css$/ 的 use 数组配置增加 less-loader

{
 test: /\.(css|less)$/,
 use: [
 require.resolve('style-loader'),
 {
 loader: require.resolve('css-loader'),
 options: {
 importLoaders: 1,
 },
 },
 {
 loader: require.resolve('postcss-loader'),
 options: {
 // Necessary for external CSS imports to work
 // https://github.com/facebookincubator/create-react-app/issues/2677
 ident: 'postcss',
 plugins: () => [
 require('postcss-flexbugs-fixes'),
 autoprefixer({
 browsers: [
 '>1%',
 'last 4 versions',
 'Firefox ESR',
 'not ie < 9', // React doesn't support IE8 anyway
 ],
 flexbox: 'no-2009',
 }),
 ],
 },
 },
 {
 loader: require.resolve('less-loader') // compiles Less to CSS
 }
 ],
},

使用css Module

antd 和 css modules 不能混用,针对antd的css 单独写一条loader的规则,不开启 css modules。

使用 exclude 和 include 配置,修改webpack.config.dev.js 和 webpack.config-prod.js 配置文件 (尽量不要使用less-loader 来处理css文件,在与antd一起使用时可能出现错误,单独写一条规则)


 {
 test: /\.css$/,
 exclude: /node_modules|antd\.css/,
 use: [
 require.resolve('style-loader'),
 {
 loader: require.resolve('css-loader'),
 options: {
 importLoaders: 1,
 modules: true, // 新增对css modules的支持
 localIdentName: '[name]__[local]__[hash:base64:5]',
 },
 },
 {
 loader: require.resolve('postcss-loader'),
 options: {
 // Necessary for external CSS imports to work
 // https://github.com/facebookincubator/create-react-app/issues/2677
 ident: 'postcss',
 plugins: () => [
 require('postcss-flexbugs-fixes'),
 autoprefixer({
 browsers: [
 '>1%',
 'last 4 versions',
 'Firefox ESR',
 'not ie < 9', // React doesn't support IE8 anyway
 ],
 flexbox: 'no-2009',
 }),
 ],
 },
 },
 ],
 },
 {
 test: /\.less$/,
 exclude: /node_modules|antd\.less/,
 use: [
 require.resolve('style-loader'),
 {
 loader: require.resolve('css-loader'),
 options: {
 importLoaders: 1,
 modules: true, // 新增对css modules的支持
 localIdentName: '[name]__[local]__[hash:base64:5]',
 },
 },
 {
 loader: require.resolve('postcss-loader'),
 options: {
 // Necessary for external CSS imports to work
 // https://github.com/facebookincubator/create-react-app/issues/2677
 ident: 'postcss',
 plugins: () => [
 require('postcss-flexbugs-fixes'),
 autoprefixer({
 browsers: [
 '>1%',
 'last 4 versions',
 'Firefox ESR',
 'not ie < 9', // React doesn't support IE8 anyway
 ],
 flexbox: 'no-2009',
 }),
 ],
 },
 },
 {
 loader: require.resolve('less-loader') // compiles Less to CSS
 },
 ],
 },
 {
 test: /\.(css)$/,
 include: /node_modules|antd\.css/,
 use: [
 require.resolve('style-loader'),
 {
 loader: require.resolve('css-loader'),
 options: {
 importLoaders: 1,
 },
 },
 {
 loader: require.resolve('postcss-loader'),
 options: {
 // Necessary for external CSS imports to work
 // https://github.com/facebookincubator/create-react-app/issues/2677
 ident: 'postcss',
 plugins: () => [
 require('postcss-flexbugs-fixes'),
 autoprefixer({
 browsers: [
 '>1%',
 'last 4 versions',
 'Firefox ESR',
 'not ie < 9', // React doesn't support IE8 anyway
 ],
 flexbox: 'no-2009',
 }),
 ],
 },
 },
 ],
 },
 {
 test: /\.(less)$/,
 include: /node_modules|antd\.less/,
 use: [
 require.resolve('style-loader'),
 {
 loader: require.resolve('css-loader'),
 options: {
 importLoaders: 1,
 },
 },
 {
 loader: require.resolve('postcss-loader'),
 options: {
 // Necessary for external CSS imports to work
 // https://github.com/facebookincubator/create-react-app/issues/2677
 ident: 'postcss',
 plugins: () => [
 require('postcss-flexbugs-fixes'),
 autoprefixer({
 browsers: [
 '>1%',
 'last 4 versions',
 'Firefox ESR',
 'not ie < 9', // React doesn't support IE8 anyway
 ],
 flexbox: 'no-2009',
 }),
 ],
 },
 },
 {
 loader: require.resolve('less-loader') // compiles Less to CSS
 },
 ],
 },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

create-react-app less create-react-app antd create-react-app 按需加载