create-react-app 一些注意事项以及优化

create-react-app  默认会有eslint语法检测

去除eslint 语法检测 找到 webpack.config.dev.js 以下代码将他注释就可以去除语法检测

{
        test: /\.(js|mjs|jsx)$/,
        enforce: 'pre',
        use: [
          {
            options: {
              formatter: require.resolve('react-dev-utils/eslintFormatter'),
              eslintPath: require.resolve('eslint'),
              
            },
            loader: require.resolve('eslint-loader'),
          },
        ],
        include: paths.appSrc,
      }

 create-react-app 配置代理


找到config -> paths路径配置文件

module.exports = {
  dotenv: resolveApp('.env'),
  appPath: resolveApp('.'),
  appBuild: resolveApp('home'),
  appPublic: resolveApp('public'),
  appHtml: resolveApp('public/home.html'),
  appHtmlName:'home.html',
  appIndexJs: resolveModule(resolveApp, 'src/index'),
  appPackageJson: resolveApp('package.json'),
  appSrc: resolveApp('src'),
  appTsConfig: resolveApp('tsconfig.json'),
  yarnLockFile: resolveApp('yarn.lock'),
  testsSetup: resolveModule(resolveApp, 'src/setupTests'),
  proxySetup: resolveApp('src/setupProxy.js'),//设置代理的配置文件
  appNodeModules: resolveApp('node_modules'),
  publicUrl: getPublicUrl(resolveApp('package.json')),
  servedPath: getServedPath(resolveApp('package.json')),
};

根据指引找到src ->  setupProxy.js  无该文件就添加该文件

 http-proxy-middleware 依赖于此包,如果提示为找到请先安装此包:npm install http-proxy-middleware

const proxy = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(proxy('/api', {
       target: 'http://127.0.0.1:3002',
       pathRewrite: {'^/api' : ''}
    }));
};

create-react-app 按需加载antd  


安装此插件  有antd 官网提供的插件

npm install babel-plugin-import --save-dev

 地址:https://github.com/ant-design/babel-plugin-import

找到webpack.config.dev.js

添加:['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }]  到options.plugins 下

 {
            test: /\.(js|mjs|jsx|ts|tsx)$/,
            include: paths.appSrc,
            loader: require.resolve('babel-loader'),
            options: {
              customize: require.resolve(
                'babel-preset-react-app/webpack-overrides'
              ),
              plugins: [
                ['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }],
                [
                  require.resolve('babel-plugin-named-asset-import'),
                  {
                    loaderMap: {
                      svg: {
                        ReactComponent: '@svgr/webpack?-prettier,-svgo![path]',
                      },
                    },
                  },
                ],
              ],
              // 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,
              // Don't waste time on Gzipping the cache
              cacheCompression: false,
            },
          },

 

react-router-dom 的使用方式


按需加载:官方案例

https://reacttraining.com/react-router/web/guides/code-splitting

步骤一:安装

npm install react-loadable

npm install @babel/plugin-syntax-dynamic-import

步骤二:package.json 中找到 babel 配置项

添加@babel/plugin-syntax-dynamic-import

"babel": {
    "presets": [
      "react-app"
    ],
    "plugins": [
      "@babel/plugin-syntax-dynamic-import",
      [
        "import",
        {
          "libraryName": "antd-mobile",
          "style": "css"
        }
      ]
    ]
  }

 步骤三:

以下有两种模式:

模式一:为[name].[hash].chunk.js  组合而成

​
import React, { Component } from 'react';
import Loadable from "react-loadable";


const Loading = () => <div>Loading...</div>;
//数字按需加载
 const HomeController = Loadable({
    loader: () => import('./HomeController'),
    loading: Loading
  });
const AboutController = Loadable({
    loader: () => import('./AboutController'),
    loading: Loading
}); 

export default{
    HomeController,
    AboutController
}

​

模式二:通过 import(/* webpackChunkName: "about" */ './AboutController') 自定义名称 about 就是按需加载的名称

​
import React, { Component } from 'react';
import Loadable from "react-loadable";


const Loading = () => <div>Loading...</div>;

/**
 * 生成自定义 chunkName 默认已数字按需加载
 */
const HomeController = Loadable({
    loader: () => import(/* webpackChunkName: "home" */ './HomeController'),
    loading: Loading
  });
const AboutController = Loadable({
    loader: () => import(/* webpackChunkName: "about" */ './AboutController'),
    loading: Loading
});
export default{
    HomeController,
    AboutController
}

​

按需加载:非官方案例

步骤一:

创建一个AsyncComponent.js 方法函数

import React, { Component } from "react";

export default function AsyncComponent(importComponent) {
    class AsyncComponent extends Component {
        constructor(props) {
            super(props);

            this.state = {
                component: null
            };
        }

        async componentDidMount() {
            const { default: component } = await importComponent();

            this.setState({
                component: component
            });
        }

        render() {
            const C = this.state.component;

            return C ? <C {...this.props} /> : null;
        }
    }

    return AsyncComponent;
}

第二步 调用使用就简单的完成了react-router 按需加载



import asyncComponent from "./AsyncComponent"
const HomeController = asyncComponent(() => import('./HomeController'))
const AboutController = asyncComponent(() => import('./AboutController')) 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值