摘要

  在react中,大多数业务逻辑都组件化;极大的减轻了代码的冗余度,如果组件的层次比较深的话,组件的import就比较费劲,在import时使用“../../components/test”的方式,组件的import就会稍显混乱、组件代码不容易维护。为了可高效的、快速的维护组件代码,废弃“../../”的组件引入方式,配置一个组件路径重写的方式引入组件。

配置内容

  我在之前就介绍过在react中引入less的配置,同样的为了配置一个路径别名,使用customize-cra来覆写webpack底层配置。(配置覆写webpack需要的插件以及第三方库就不在复述,不清楚的可以去参考Ant Design官方的配置说明)

路径别名重写方式一

const { override } = require('customize-cra');
const path = require("path"); module.exports = override(
config =>{
config.resolve.alias = {
"@": path.resolve(__dirname, "src")
};
return config;
},
);

路径别名重写方式二

const { override, addWebpackAlias } = require('customize-cra');
const path = require("path"); module.exports = override(
addWebpackAlias({
["@"]: path.resolve(__dirname, "src")
}),
);

Example-实例展示

App.js父组件代码

import React, { useState } from 'react'
import style from './App.module.less'
import { Home } from '@/pages/home'; //@方式引入Home组件 class App extends React.Component {
render() {
return (
<div className={style.box}>
<Home name='杰瑞与汤姆'/>
</div>
);
}
} export default App;

Home.js子组件代码

import React, { Component } from 'react';
import { Button } from 'antd'; export class Home extends Component {
constructor(props) {
super(props);
this.state = { };
}
render() {
return (
<div>
<Button type='danger'>{this.props.name}</Button>
</div>
);
}
}

配置@路径智能提示

  在测试过程中,虽然应用了@引入组件的方式,但是在引用过程中没有智能提示组件路径,为了解决智能提示问题,安装Path Intellisence插件来配置提示。

1、vsCode插件:

  Path Intellisence(在插件库中查找并下载插件)

2、vsCode中setting.json配置插件功能:(打开vscode编辑器设置,在设置中打开setting.json文件)

// 配置@路径智能提示
"path-intellisense.mappings": {
"@": "${workspaceRoot}/src"
}

3、在项目package.json所在同级目录下创建文件jsconfig.json:

{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"allowSyntheticDefaultImports": true,
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"exclude": [
"node_modules"
]
}

测试结果

总结

  分享一种更高效、快捷的import方式,这样的import方式既保证了组件式代码高内聚性、低耦合度的特性,也提高了项目的可维护性,更好的锁定问题所在。

更多关于customize-cra库API的使用可以访问github的文档说明,customize-cra库地址:https://github.com/arackaf/customize-cra/blob/master/api.md

react import 配置路径别名'@',简化import Component的方式的更多相关文章

  1. webpack + ts 配置路径别名无死角方法总结

    webpack + ts 配置路径别名总结 自我体验加总结:在配置脚手架时,定制别名很有必要,可以使得代码更优雅,可读性更强.但在使用ts的时候,即便项目能够运行,vscode 确时长会提示 can' ...

  2. 【vue-cli 3.0】 vue.config.js配置 - 路径别名

    如何配置vue-cli 3中vue.config.js的路径别名? 前段时间更新电脑重装了一下vue-cli,发现了vue-cli已经更新到3.0版.用来搭建项目后发现简化了很多,而且配置文件现在可以 ...

  3. typescript项目配置路径别名(路径映射)

    在vue项目中,我们可以利用“@”来指代src目录,在普通webpack项目中,我们也可以通过配置webpack的config来指定路径别名,但是在typescript+webpack项目中我们该怎么 ...

  4. vue配置config ‘./.../.../***/**.vue’路径别名

    cli-4的脚手架配置 因为组件的引用,经常会遇到import * from  '../../../components/common/***.vue‘这样的引入格式,太复杂了,所以可以在vue里面配 ...

  5. day16模块,导入模板完成的三件事,起别名,模块的分类,模块的加载顺序,环境变量,from...import语法导入,from...import *,链式导入,循环导入

    复习 ''' 1.生成器中的send方法 -- 给当前停止的yield发生信息 -- 内部调用__next__()取到下一个yield的返回值 2.递归:函数的(直接,间接)自调用 -- 回溯 与 递 ...

  6. 使用import简化spring的配置 spring import 标签的解析 使用import或加载spring配置时,报错误There is no ID/IDREF 多个Spring配置文件import resource路径配置

    spring-import 标签的解析.使用案例: 对于spring配置文件的编写,我想,对于经历过庞大项目的人,都有那种恐惧的心理,太多的配置文件.不过,分模块都是大多数人能想到的方法,但是,怎么分 ...

  7. Vue 导入文件import、路径@和.的区别

    ***import: html文件中,通过script标签引入js文件.而vue中,通过import xxx from xxx路径的方式导入文件,不光可以导入js文件. from前的:“xxx”指的是 ...

  8. 自学Zabbix10.1 Configuration export/import 配置导入导出

    自学Zabbix10.1 Configuration export/import 配置导入导出 通过导入/导出zabbix配置文件,我们可以将自己写好的模板等配置在网络上分享,我们也可以导入网络上分享 ...

  9. Python import搜索路径相关

    import搜索路径 在当前目录下搜索该模块 在环境变量 PYTHONPATH 中指定的路径列表中依次搜索 在 Python 安装路径的 lib 库中搜索 查看当前的搜索路径 import sys p ...

随机推荐

  1. 文件转移 互联网组成 路由器 分组交换 交换机 冲突域 网卡 数据帧的发送与接收会带来CPU开销 CPU中断 双网卡切换

    https://zh.wikipedia.org/zh-cn/网段 在以太网环境中,一个网段其实也就是一个冲突域(碰撞域).同一网段中的设备共享(包括通过集线器等设备中转连接)同一物理总线,在这一总线 ...

  2. SQL-W3School-高级:SQL PRIMARY KEY 约束

    ylbtech-SQL-W3School-高级:SQL PRIMARY KEY 约束 1.返回顶部 1. SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录 ...

  3. 多位IT专家分享他们离不开的实用工具

    本文的 PDF版本可供下载. #1: John Bartow,顾问 John Bartow的工作领域是网络和PC安全,他提供了自己从事的咨询公司, WinHaven Computer Consulti ...

  4. 一百三十八:CMS系统之发布帖子前端js

    先补一个功能,根据扥状态显示用户名/退出或者登录/注册 from .views import bpimport configfrom flask import session, gfrom .mode ...

  5. centos 7设置limit,不生效问题

    1:记录未修改之前的ulimit值 [root@bogon ~]# ulimit -a 2:修改配置文件 vim  /etc/security/limits.conf   在后面添加 *      s ...

  6. [Tensorflow] 使用 tf.keras.utils.get_file() 下载 MS-COCO 2014 数据集

    import argparse import tensorflow as tf tf.enable_eager_execution() def main(args): ""&quo ...

  7. 【VS开发】获取CPU tick tick 周期

    多核处理器时,__rdtsc()的使用-编程珠玑第一章 根据书中提供的代码清单1-5,可以完成对于多核处理器的cpu占用率的控制. 但是在使用GetCPUTickCount计时时,下面的算式会出现一点 ...

  8. linux文本处理三剑客(一)---grep

    在linux种有一句话,叫做一切皆文件.文件有个特点,它是个文本.它可以读.可以写,如果是二进制文件,它还能执行.这样的话,我们在使用linux的时候,多数时间都是要和各式各样文件打交道的.那么,熟悉 ...

  9. js函数(3)

    8.5 作为命名空间的函数 即定义一个函数用做临时的命名空间,在这个命名空间内定义的变量都不会污染到全局命名空间. 将一段代码封装在函数内部,然后调用这个函数.这样全局变量就变成了函数内部的局部变量: ...

  10. Java编程思想(二)一切都是对象

    2.1用句柄操纵对象 尽管一切都看作是对象,但是操纵的标识符实际上是指向一个对象的“句柄”(handdle): 拥有一个句柄并不表示必须有一个对象同他连接: String  s:   这里创建的只是句 ...