React craco 详细使用与介绍(类似 Vue 外抛的 vue.config.js)

简介: React craco 详细使用与介绍(类似 Vue 外抛的 vue.config.js)

一、简介

  • craco 官方文档craco Github
  • craco 是一个用于扩展 Create React App(CRA)的工具,CRA 是一个用于快速搭建 React 应用的脚手架工具。CRA 提供了一个简单的项目结构和配置,使得开发者可以快速开始一个 React 项目的开发。
    然而 CRA 的配置是被隐藏的,开发者无法对其进行自定义和扩展。这就是 craco 出现的原因。craco(Create React App Configuration Override) 允许开发者覆盖和扩展 CRA 的配置,以满足更复杂的项目需求。
    使用 craco,开发者可以在不弹出 CRA 的配置的情况下,修改 webpack 配置babel 配置ESLint 配置devServer配置 等。craco 提供了一种简单的方式来覆盖 CRA 的默认配置,同时保留了 CRA 的简洁性和易用性。
    通过 craco,开发者可以使用自定义的 webpack 插件babel 插件其他工具,以满足项目的特定需求。例如:可以添加自定义的 webpack loader,配置自定义的 babel presetplugin,或者修改 webpack 的输出路径等。

二、使用

  • 安装
$ npm i -D @craco/craco
  • 根目录创建 craco.config.js 配置文件,可以理解为 Vue 项目中外抛的 vue.config.js
my-app  
    ├── node_modules  
  + ├── craco.config.js  
    └── package.json
  • 配置文件名其他写法支持,如果找到多个配置文件,craco 将使用上面列表中最高的一个:
1、craco.config.ts
2、craco.config.js
3、craco.config.cjs
4、.cracorc.ts
5、.cracorc.js
6、.cracorc
  • 如果多个配置文件,也可以通过 package.json 添加字段指定配置文件:
...
{  
    "cracoConfig": "config/craco-config-with-custom-name.js"  
}
...
  • scripts 指令中指定配置文件进行编译:
{  
    "scripts": {  
        "start": "craco start --config config/craco-config-with-custom-name.js"  
    }  
}
  • 修改 package.json 文件中 scripts 配置的 react-scripts 替换为 craco,例如:
"scripts": {
-   // "start": "react-scripts start",
-   // "build": "react-scripts build",
-   // "test": "react-scripts test",
+   "start": "craco start",
+   "build": "craco build",
+   "test": "craco test",
    "eject": "react-scripts eject"
}
  • craco.config.js 文件中,可以根据需要修改和扩展 CRA 的配置。以下是一个示例配置文件的基本结构:
    基本可以覆盖正常业务的所有需求配置,更多配置可以查看下 官方文档
const path = require('path')
const lessPlugin = require('craco-less')
module.exports = {
  // 插件配置
  plugins: [
    {
      plugin: lessPlugin,
      options: {
        lessLoaderOptions: {
          lessOptions: {
            // modifyVars: { '@primary-color': '#1DA57A' },
            javascriptEnabled: true
          }
        }
      }
    }
    // ...
  ],
  // 修改 babel 配置
  babel: {
    // plugins: [
    //   ['@babel/plugin-proposal-decorators', { legacy: true }],
    //   [   
    //     'import', 
    //     {
    //       'libraryName': 'antd',
    //       'libraryDirectory': 'es',
    //       'style': 'css' // 设置为 true 即是 less 这里用的是 css
    //     }
    //   ]
    // ]
    // ...
  },
  // 修改 eslint 配置
  eslint: {
    // ...
  },
  // 修改 module 配置
  module: {
    // rules:[// 规则,在写 style.module.scss 的时候发现引入后缀为 .scss 会报错,在这里配置一下即可
    //   {
    //     test: /.scss$/,
    //     loaders: ['style-loader', 'css-loader', 'sass-loader']
    //   }
    // ]
    // ...
  },
  // 跨域配置
  devServer: {
    proxy: {
      '/api': {
        target: 'https://xxx:8080',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
    // ...
  },
  // webpack 配置
  webpack: {
    // 配置别名
    alias: {
      // 约定:使用 @ 表示 src 文件所在路径
      '@': path.resolve(__dirname, 'src')
    },
    // webpack 插件
    plugins: {
      add: [ /* ... */],
      remove: [ /* ... */],
    },
    // plugins: [
    //   new ConfigWebpackPlugin(),
    //   ...whenDev(() => [new CircularDependencyPlugin()], []),
    // ],
    // 这里面是 webpack 原始配置,这里追加的配置,将与原始配置合并
    configure: {
      resolve: {
        fallback: {
          'path': false,
          'util': false,
          'url': false,
          'http': false,
          'https': false,
          'stream': false,
          'assert': false,
          'querystring': false,
          'zlib': false
        }
      }
    }
    // ...
  }
}
相关文章
|
3天前
|
JavaScript
vue中使用 HotKeys.js 教程(按键响应、快捷键开发)
vue中使用 HotKeys.js 教程(按键响应、快捷键开发)
8 0
|
4天前
|
JavaScript
网页CAD(JS Vue 预览dwg)如何二次开发常用的CAD编辑功能
```markdown # CAD网页编程概览 - 使用mxcad库,实现CAD操作如删除、复制、镜像、移动和旋转。 - `erase()`方法删除实体,`clone()`配合`transformBy()`用于复制和编辑。 - `mirror()`和`transformBy(setMirror)`执行镜像操作,基于参考线。 - `move()`和`transformBy(setToTranslation)`实现移动功能。 - `rotate()`和`transformBy(setToRotation)`进行旋转,支持角度输入。 ```
网页CAD(JS Vue 预览dwg)如何二次开发常用的CAD编辑功能
|
3天前
|
JSON JavaScript 数据格式
vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
17 3
|
4天前
|
JavaScript 前端开发 容器
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
9 2
|
5天前
|
JavaScript
vue 全局响应键盘按键/监听键盘事件(含 js 获取键盘keyCode值的方法)
vue 全局响应键盘按键/监听键盘事件(含 js 获取键盘keyCode值的方法)
10 2
|
5天前
|
运维 JavaScript 前端开发
前端 JS 经典:vue 开发中的 base 和 publicPath
前端 JS 经典:vue 开发中的 base 和 publicPath
12 1
|
5天前
|
JavaScript 前端开发
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
9 1
|
5天前
|
JavaScript
vue + d3.js(v6) 绘制【树状图/思维导图】可折叠/展开,可点击跳转,可带标签
vue + d3.js(v6) 绘制【树状图/思维导图】可折叠/展开,可点击跳转,可带标签
19 1
|
1天前
|
JavaScript API
若依没解构送post请求出现的bug,vue.runtime.esm.js:620 [Vue warn]: Error in mounted hook: “TypeError: (0 , _inde
若依没解构送post请求出现的bug,vue.runtime.esm.js:620 [Vue warn]: Error in mounted hook: “TypeError: (0 , _inde
|
2天前
|
JavaScript
vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)
vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)
4 0