欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

react 引用路径的简易调整,使用craco插件

程序员文章站 2022-03-11 18:38:16
...

       在react框架中,为了避免在引用路径中会用到../../,在层级较深的情况下,容易在引用路径时用到大量的.和/的组合,使代码看起来比较凌乱。而将相对路径改变为绝对路径,并用简单的符号代替某一特定层级文件名称,如@代替src,@@代替src/component,@redux代替src/redux......可以更加直观的看到文件的引用位置,无需翻出再翻进来引用文件。

       推荐使用方法2或3

1.拆分react-script,暴露配置文件,该过程不可逆

        create-react-app生成的项目看不到 webpack 相关的配置文件,需要先暴露出来,如下代码是可以将配置文件拆分成config和scripts文件

npm run eject

在config文件中找到webpack.config.js文件,在resolve中修改alias配置,即可更改路径

  resolve: {
      ...
      alias: {
        ...
        // 路径引用 @
        '@': path.resolve('src'),
        '@@': path.resolve('src/components'),
      }
    }

 弊端:过程不可逆,config和scripts文件将一直存在于该项目工程中。

2.借助第三方插件craco

         craco避免eject项目而对项目中webpack进行自定义配置的开发者

安装

npm install @craco/craco 
// npm install "@craco/craco"  由于版本问题可能需要用到""

修改package.json中的scripts (set POST=3005,修改默认端口号)

  "scripts": {
    "start": "set POST=3005 && craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
  },

 根目录创建craco.config.js文件,与src同级

const path = require('path')
const resolve  = dir => path.resolve(__dirname,dir)

module.exports ={
  webpack:{
    alias:{
      "@":resolve("src"),
      "components":resolve("src/components")
    }
  }
}

3.antd 组件按需加载,支持 less,支持 类装饰器 语法,支持 webpack 别名并支持 vscode 支持路径补全

安装依赖

npm install antd -S
npm install @craco/craco craco-less @babel/plugin-proposal-decorators babel-plugin-import​​​​​​​ -D
// 在使用到@符号时需注意是否需要使用“”将其包含,"@craco/craco","@babel/plugin-proposal-decorators"

根目录下创建 craco.config.js文件,与src同级

const CracoLessPlugin = require('craco-less')
const path = require('path')

const pathResolve = pathUrl => path.join(__dirname, pathUrl)

module.exports = {
  webpack: {
    alias: {
      '@': pathResolve('src'),
      '@@': pathResolve('src/components'),
      '@redux': pathResolve('src/redux')
    }
  },
  babel: {
    plugins: [
      ['import', { libraryName: 'antd', style: true }],
      ['@babel/plugin-proposal-decorators', { legacy: true }]
    ]
  },
  plugins: [
    {
      plugin: CracoLessPlugin,
      options: {
      	// 根据 less-loader 版本的不同会有不同的配置
        lessLoaderOptions: {
          lessOptions: {
            modifyVars: {},
            javascriptEnabled: true
          }
        }
      }
    }
  ]
}

修改package.json中的scripts

  "scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
  },

根目录下创建jsconfig.json

{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@/*": ["src/*"],
      "@@/*": ["src/components/*"],
      "@redux/*": ["src/redux/*"],
    },
    "experimentalDecorators": true
  },
  "exclude": ["node_modules", "build"]
}

该配置是应该在一个项目建成指出来搭建的,而后续项目有所调整或改变也可以通过craco来更改配置。