在react引用组件时,我们经常会遇到下图的情况

在这里插入图片描述

  • '…/…/…/'来指代文件所在文件夹的文职
  • 这种’…/'很不美观也很难读,看着就很复杂,很难读,不能一眼知道文件所在的位置情况
  • 在vue中,我们可以使用@来指代src文件夹

那么在react中,怎么使用@符号指代src文件夹呢?

  • 因为我的项目有用到antd,所以直接使用craco来配置

引入craco

$ yarn add @craco/craco

修改package.json文件,将craco作为执行文件

/* package.json */
"scripts": {
-   "start": "react-scripts start",
-   "build": "react-scripts build",
-   "test": "react-scripts test",
+   "start": "craco start",
+   "build": "craco build",
+   "test": "craco test",
}

配置craco.config.js文件

在项目根目录创建一个 craco.config.js 用于修改默认配置。

/* craco.config.js */
module.exports = {
  // ...
};

将js的根路径和你想要自定义的路径拼接起来

const path = require("path")//导入path模块
//定义函数resolve,将你想要自定义的路径和js的根路劲作拼接
const resolve = dir =>path.resolve(__dirname,dir)

在module.exports中添加webpack相关配置

module.exports = {
  webpack:{
    alias:{
    //名称:路径
      "@":resolve("src")
    }
  }
};

然后就成功了,这样就不不用使用inject命令也能自定义目录了

附录:react项目配置 @ 为src根目录

前置:

修改jsconfig.json文件

{
  "compilerOptions": {
    "jsx": "react",
    "experimentalDecorators": true,
    "baseUrl": "./",
    "paths": {
      "@/*": [
        "src/*"
      ]
    }
  }
}

1. 原生create-react-app 的情况

若已经使用 “npm run eject” 暴露了webpack.config.js文件

修改 config/webpack.config.js 文件配置(找到alias)

const paths = require('./paths');
resolve: {
    alias: {
        '@': paths.appSrc
    },
}

2.未暴露webpack.config.js配置文件的情况(请参考文章开头介绍)