使用create-react-app创建React项目

2023-10-28

目录

环境

开发工具

创建

简单的配置

1. 安装craco插件

2. 修改package.json配置文件

3. 重写webpack配置文件

参考


简单记录一下使用create-react-app创建React项目,使用craco进行了简单的配置。

包括支持装饰器语法、按需加载和简单的包体积优化。

环境

NODE:

node -v
v16.13.2

NPM:

npm -v
8.1.2

YARN:

yarn -v
1.22.18

开发工具

VS Code

创建

先看一下创建完成的目录

 

图方便直接使用create-react-app,先查看一下版本

create-react-app -V 

这个命令等同于

create-react-app --version 

我的版本是 5.0.1,如果查看版本命令报错,可能是没有安装create-react-app,全局安装一下

npm install create-react-app -g

创建一个名为my-app的项目

create-react-app my-app

简单的配置

        create-react-app创建的项目config文件夹是隐藏,没法直接修改webpack.config.js配置文件。我们可以通过一些插件重写或者通过eject命令暴露配置文件。

        我选择craco插件。

1. 安装craco插件

        这种开发用的插件,我们可以通过 后缀 -D (等同于 -save -dev) 安装

yarn add @craco/craco -D

        安装完成后package.json文件中会多一个devDependencies,顾名思义就是开发依赖。

2. 修改package.json配置文件

        在执行启动或者打包命令时,webpack首先找到项目根目录的package.json文件,根据配置执行对应的脚本。原本的配置和实际执行的脚本:

         修改配置,使程序使用craco下的脚本

"scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test"
},

        实际执行的脚本:

3. 重写webpack配置文件

        在项目根目录创建craco.config.js文件

        一些基本的配置:

/* craco.config.js */
const path = require('path')
/** 插件 */ 
const CracoLessPlugin = require('craco-less')
// 打包分析
// const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer')
// 打包进度
const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin')

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

module.exports = {
  webpack: {
    plugins: [
      // new BundleAnalyzerPlugin(),
      new SimpleProgressWebpackPlugin()
    ],
    alias: {
      '@': pathResolve('src'),
    },
    configure: (webpackConfig, { env: webpackEnv, paths }) => {
      const isProduction = webpackEnv === 'production'
      if (isProduction) {
        webpackConfig.optimization.splitChunks = {
          cacheGroups: {
            base: {
              // 基本框架
              chunks: 'all',
              test: /(react|react-dom|react-router-dom)/,
              name: 'base',
              priority: 20,
            },
            antd: {
              test: /antd/,
              name: 'antd',
              priority: 10,
            },
            commons: {
              chunks: 'all',
              // 将两个以上的chunk所共享的模块打包至commons组。
              minChunks: 2,
              name: 'commons',
              priority: -10,
            },
          }
        };
      }
      return webpackConfig;
    },
  },
  babel: {
    plugins: [
      ['import', { libraryName: 'antd', style: true }],
      ['@babel/plugin-proposal-decorators', { legacy: true }]
    ]
  },
  plugins: [
    {
      plugin: CracoLessPlugin,
      options: {
        lessLoaderOptions: {
          lessOptions: {
            modifyVars: { '@primary-color': '#19CAAD' },
            javascriptEnabled: true,
          },
        },
      },
    },
  ],
};

 详细的配置参考webpack.config.js,这里用到的一些插件安装:

// 支持less
yarn  add craco-less -D

// 打包进度
yarn add simple-progress-webpack-plugin -D

// 打包体积分析
yarn add webpack-bundle-analyzer -D

// 支持装饰器语法
yarn add @babel/plugin-proposal-decorators -D

// 按需加载
yarn add babel-plugin-import -D

        常用的组件库antd,不是开发依赖包

yarn add antd

        启动看一下

yarn start

         放开craco.config.js中 BundleAnalyzerPlugin 插件的注释,打一下包

yarn build

     可以看到   react-dom 和 react 被抽离出来打包到了一个叫base.[hash值].js文件中,说明配置是有效的。这可以帮助优化打包后的程序的体积。

参考

在 create-react-app 中使用 - Ant Design

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用create-react-app创建React项目 的相关文章

  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • Web 串行 API - 未捕获(承诺中)DOMException:无法打开串行端口/所需成员 baudRate 未定义

    下面的代码可以在我的 Xubuntu 机器上运行 但现在我在 Kubuntu 上 它不再工作了 它不会打开端口 Arduino IDE 工作正常 可以向开发板写入代码 并且我可以在 Chrome 中选择设备 Arduino Uno 但当我尝
  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 如何在react-native中获取Text组件的onPress值

    我是一名新的 React Native 开发人员 我想使用 onPress 获取 Text 组件的值并将其传递给函数
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 摆脱node-jsx

    在我的 NodeJS 应用程序的路由器中 我想渲染一个 React 应用程序 由于它没有被浏览器化 并且已反应 因此它返回unexpected token lt 构建时出错 我发现如果我require node jsx install 它不
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • 04Python爬虫:retrying模块

    代码 结果 None 转载于 https www cnblogs com jumpkin1122 p 11521013 html
  • 勇担重任从不放弃——一个阿里P7的内部求职故事

    Java开发程序员在互联网行业中名声在外 同时也意味着竞争特别激烈 当然 在众多从业者中 并不是每个人都可以经历从Java外包到成为阿里P7这样的成功故事 不过 这个同志通过自己坚定的信仰和勤奋的努力 不仅完成了自己的进步增值 而且分享了成
  • 泰勒图(Taylor Diagrams)和常用模型评价指标小结

    文章内容仅用于自己知识学习和分享 如有侵权 还请联系并删除 一 泰勒图 1 原理 1 1 定义 泰勒图 Taylor diagram 可以简单的理解为一种的可同时展示相关系数 their correlation 中心均方根误差 their
  • win11上的虚拟机安装Ubuntu 16.04和基础环境配置教程

    1 安装 VM 17 win11最好装VM16以后的 2 下载 ubuntu 的iso文件 可以在国内的镜像站下载更快 如下是阿里云的镜像站ubuntu 16 04 网址 https mirrors aliyun com oldubuntu
  • LeetCode 37 把数组排成最小的数

    示例 1 输入 10 2 输出 102 示例 2 输入 3 30 34 5 9 输出 3033459 提示 0 lt nums length lt 100 解题思路 此题求拼接起来的最小数字 本质上是一个排序问题 设数组 nums 中任意两
  • 利用Hu不变矩进行特征提取

    include stdafx h include
  • C# 串口CRC CCITT-FALSE 校验

    串口CRC CCITT FALSE 校验 public static bool CRC16 CCITT FALSE byte byteData C crc 16 CCITT FALSE 带判断校验的 bool flag false usho
  • 大数据从入门到精通(超详细版)之HDFS安装部署 , 跟着部署 , 真的有手就行 !

    前言 嗨 各位小伙伴 恭喜大家学习到这里 不知道关于大数据前面的知识遗忘程度怎么样了 又或者是对大数据后面的知识是否感兴趣 本文是 大数据从入门到精通 超详细版 的一部分 小伙伴们如果对此感谢兴趣的话 推荐大家按照大数据学习路径开始学习哦
  • 什么是link标签?

    什么是link标签 link标签通常放置在一个网页的头部标签head标签内的用于链接外部css文件 链接收藏夹图标 favicon ico 标签最常见的用途是链接外部样式表 外部资源 link实例 链接外部css样式时候link标签的内容结
  • Android性能优化之内存优化

    前言 成为一名优秀的Android开发 需要一份完备的知识体系 在这里 让我们一起成长为自己所想的那样 内存优化可以说是性能优化中最重要的优化点之一 可以说 如果你没有掌握系统的内存优化方案 就不能说你对Android的性能优化有过多的研究
  • OpenHarmony鸿蒙 润和Pegasus套件样例--智能安防

    润和Pegasus套件样例 智能安防 该样例展示OpenHarmony智能安防项目 当温度传感器超过设定值后 或者烟雾传感器检测到烟雾时 会触发蜂鸣器工作 同时通知到HarmonyOS手机上的APP 下载源码 建议将本教程的设备源码下载后
  • 小白入门——“贪吃蛇”的C语言实现(详细)

    C语言实现 编译环境VS 附 easyx图形化 文章末尾 效果图如下 有一些函数kbhit getch 在这表示为 kbhit与 getch 不同编译器原因 注意在Dev等集成开发软件下可能会CE o o 一 引言 作为一个小白 相信大家的
  • 个人工作失误复盘

    今天 同门突然指出了我在去年10月做一项代码测试工作时犯的错误 当时 我的任务是测试某论文中新发布的图像配准算法在我们的航拍图像配准任务上的效果 以便决定是否在其上进行改进 我按照readme文件中的指引下载了预训练权重 并按照项目代码中给
  • 接口自动化测试环境搭建(unittest+requests+HTMLTestRunner)

    该自动化测试框架基于python单元测试框架unittest 使用HTMLTestRunner来生成测试报告 使用Requests xlrd 和 xlwt等库 一 安装python运行环境 安装包官方下载地址 https www pytho
  • GAN+pytorch实现MNIST生成

    背景知识 GAN 原理可以在这里查看 GAN入门简介 pytorch 一个深度学习的框架 关于环境配置有问题 可以在这里查看 从零开始机器学习 代码实现 本文实现最简单的例子 利用GAN生成MNIST的数字 代码如下 导入包 matplot
  • 麦昆PLUS V2-适合中小学STEAM教学的机器人套件

    著名开源硬件商DFRobot推出的最新版本机器人套件麦昆Plus V2来了 它非常适用于中小学STEAM机器人教学 和麦昆LITE相比 麦昆plus V2的优势有哪些 和麦昆LITE相比 具有丰富的扩展接口 充足的电力供应 宽大的机身 麦昆
  • 基于U-Net的递归残差卷积神经网络在医学图像分割中的应用

    转载 版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net weixin 45723705 article details 10709748
  • Ubuntu18.04~Ubuntu22.04安装并配置VNC

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 VNC是什么 二 系统环境 1 前提 2 打开Share开关 3 安装x11vnc 4 测试 1 使用方法 2 重要补充 总结 前言 有些操作需要Desk
  • OpenCV_车辆检测实战

    前言 总纲请看 计算机视觉学习路 1 去除背景 createBackgroundSubtractorMOG2 history 200 代表预存多少视频帧 根据这些帧里面静止的东西判断背景 可以看到树叶形成了很多噪点 所以需要在去除背景前先去
  • 使用create-react-app创建React项目

    目录 环境 开发工具 创建 简单的配置 1 安装craco插件 2 修改package json配置文件 3 重写webpack配置文件 参考 简单记录一下使用create react app创建React项目 使用craco进行了简单的配