React脚手架工具创建项目的详细介绍

news2024/11/20 20:29:20

文章目录

    • React脚手架工具
      • 脚手架工具解析
      • create-react-app
      • 创建React项目
      • 目录的结构分析
      • 从零编写代码

React脚手架工具

脚手架工具解析

如果我们只是开发几个小的demo程序,那么永远不需要考虑一些复杂的问题:

比如目录结构如何组织划分;

比如如何管理文件之间的相互依赖;

比如如何管理第三方模块的依赖;

比如项目发布前如何压缩、打包项目;

等等…

但是现代的前端项目已经越来越复杂了:

不会再是在HTML中引入几个css文件,引入几个编写的js文件或者第三方的js文件这么简单;

比如css可能是使用less、sass等预处理器进行编写,我们需要将它们转成普通的css才能被浏览器解析;

比如JavaScript代码不再只是编写在几个文件中,而是通过模块化的方式,被组成在成百上千个文件中,我们需要通过模块化的技术来管理它们之间的相互依赖;

比如项目需要依赖很多的第三方库,如何更好的管理它们(比如管理它们的依赖、版本升级等);

为了解决上面这些问题,我们需要再去学习一些工具:

比如babel、webpack、gulp,配置它们转换规则、打包依赖、热更新等等一些的内容;

脚手架的出现,就是帮助我们解决这一系列问题的;

编程中提到的脚手架(Scaffold),其实是一种工具,帮我们可以快速生成项目的工程化结构;

每个项目作出完成的效果不同,但是它们的基本工程化结构是相似的;

既然相似,就没有必要每次都从零开始搭建,完全可以使用一些工具,帮助我们生产基本的工程化模板;

不同的项目,在这个模板的基础之上进行项目开发或者进行一些配置的简单修改即可;

这样也可以间接保证项目的基本机构一致性,方便后期的维护;

小结: 脚手架让项目从搭建到开发,再到部署,整个流程变得快速和便捷;


create-react-app

对于现在比较流行的三大框架都有属于自己的脚手架:

Vue的脚手架:@vue/cli

Angular的脚手架:@angular/cli

React的脚手架:create-react-app

它们的作用都是帮助我们生成一个通用的目录结构,并且已经将我们所需的工程环境配置好。

使用这些脚手架需要依赖什么呢?

目前这些脚手架都是使用node编写的,并且都是基于webpack的;

所以我们必须在自己的电脑上安装node环境;

这里我们主要是学习React,所以我们以React的脚手架工具:create-react-app作为讲解;

React脚手架本身需要依赖node,所以我们需要安装node环境:

无论是windows还是Mac OS,都可以通过node官网直接下载;

官网地址:https://nodejs.org/en/download/

注意:这里推荐大家下载LTS(Long-term support )版本,是长期支持版本,会比较稳定;

下载后,双击安装即可:

安装过程中,会自动配置环境变量;

安装时,会同时帮助我们安装npm管理工具;

创建React项目

我们需要安装React脚手架工具, 全局安装npm i create-react-app -g

安装完成后, 我们就可以通过脚手架来创建React项目了

创建React项目的命令: create-react-app 项目名称

注意:项目名称不能包含大写字母

另外还有更多创建项目的方式,可以参考GitHub的readme

创建完成后,进入对应的目录,就可以将项目跑起来:

React早期使用的包管理工具yarn, 输入yarn start将项目跑起来;

目前React创建的项目是使用的npm包管理工具, 输入npm run start可以将项目跑起来

目录的结构分析

在这里插入图片描述

整个目录结构都非常好理解,只是有一个PWA相关的概念:

PWA全称Progressive Web App,即渐进式WEB应用;

一个 PWA 应用首先是一个网页, 可以通过 Web 技术编写出一个网页应用;

随后添加上 App Manifest 和 Service Worker 来实现 PWA 的安装和离线等功能;

这种Web存在的形式,我们也称之为是 Web App;

PWA解决了哪些问题呢?

可以将PWA的网站像应用程序一样添加至主屏幕,点击主屏幕图标可以实现启动动画以及隐藏地址栏;

实现离线缓存功能,即使用户手机没有网络,依然可以使用一些离线功能;

实现了消息推送;

等等一系列类似于Native App相关的功能;

更多PWA相关的知识,可以自行去学习更多(在公司是基本用不到PWA的, 了解即可);

链接: https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps

从零编写代码

通过脚手架创建完项目,很多人还是会感觉目录结构过于复杂,所以我打算从零带着大家来编写代码。

我们先将不需要的文件统统删掉:

将public文件下, 除favicon.ico和index.html之外的文件都删除掉

src文件夹是我们编写源代码的地方, 默认创建项目在src文件夹中生成的文件全部都是可以删除的,

在这里插入图片描述

删除完成我们需要创建一个index.js文件, 因为这是webpack打包的入口文件, 在index.js中开始编写React代码:

我们会发现和写的代码是逻辑是一致的;

只是在模块化开发中,我们需要手动的来导入React、ReactDOM,因为它们都是在我们安装的模块中;

import ReactDOM from "react-dom/client"

const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(<h2>哈哈哈哈</h2>)

**root.render是可以渲染组件的, 我们可以编写一个组件通过render渲染 **

import React from "react"
import ReactDOM from "react-dom/client"

class App extends React.Component {
  constructor() {
    super()
    this.state = {
      message: "Hello React"
    }
  }

  render() {
    const { message } = this.state
    return (
      <div>
        <h2>{message}</h2>
      </div>
    )
  }
}

const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(<App/>)

如果我们不希望直接在 root.render 中编写过多的代码,就可以单独抽取一个组件到App.js文件或者App.jsx文件:

// App.js

import React from "react"

class App extends React.Component {
  constructor() {
    super()
    this.state = {
      message: "Hello React"
    }
  }

  render() {
    const { message } = this.state
    return (
      <div>
        <h2>{message}</h2>
      </div>
    )
  }
}

export default App
// index.js

import ReactDOM from "react-dom/client"
import App from "./App"


const root = ReactDOM.createRoot(document.querySelector("#root"))
root.render(<App/>)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python lxml库的安装和使用

lxml 是 Python 的第三方解析库&#xff0c;完全使用 Python 语言编写&#xff0c;它对 Xpath 表达式提供了良好的支持&#xff0c;因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 安装lxml库 lxml 属于 Python 第三方库&#xff0c;因此需要…

全网多种方式解决Unchecked runtime.lastError: The message port closed before a response was received的错误

文章目录1. 文章引言2. 分析问题3. 解决问题4. 解决该错误的其他方法1. 文章引言 今天启动项目后访问Knife4j接口文档&#xff0c;却报出下图错误&#xff1a; 在报出Knife4j文档请求异常错误时&#xff0c;赶紧打开控制台&#xff0c;如下所示&#xff1a; 即Unchecked runti…

CSS过渡动画

css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 transition 是 css3 新增的⼀个功能&#xff0c;可以实现元素不同状态间的平滑过渡&#xff08;当元素从⼀个状态进⼊到另⼀个状态时&#xff09;&#xff0c;经常⽤来制作⼀些动画效果。 之…

前端项目面试核心问题(持续更新)

本文有配套视频教程 项目面核心问题回答思路 说说你最近的项目 记叙文的六要素&#xff1a;时间、人物、地点、起因、经过、结果&#xff1b;时间&#xff1a;研发周期&#xff1b;人物&#xff1a;团队成员、分工、我负责哪几个模块&#xff1b;起因&#xff1a;项目背景、…

Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(开发导航栏及公共部分)

基于 Vue3.x Vant UI 的多功能记账本&#xff08;三&#xff09; 文章目录基于 Vue3.x Vant UI 的多功能记账本&#xff08;三&#xff09;项目演示开发导航栏1、底部导航栏2、测试底部导航栏3、公共头部写到最后&#xff08;附源码&#xff09;系列内容参考链接基于 Vue3.x …

element-UI组件之日期时间选择器与时间格式转化

element-UI组件之日期时间选择器与时间格式转化日期选择器与时间选择器的一般使用日期时间选择器选择日期时间点选择日期范围日期选择器月份范围选择器禁选日期用time.getTime()进行日期(时间)格式的转换时间选择器el-time-select选择固定时间点el-time-picker选择任意时间点禁…

Vite 基本配置及原理

Vite 基本配置及原理介绍vite.config.jsoptimizeDeps.exclude不同环境的 vite 配置css配置Vite 对 css 的处理Vite 对 cssmodule 的处理和配置Vite 对预处理器的配置devSourcemapVite 对 postcss 的支持Vite 静态资源别名设置Vite 生产环境配置介绍 如果你还不知道 Vite&#…

【Vue入门必备知识篇05】--- Vue Router路由

前言❤️ 当落日余晖照在身上&#xff0c;没有污秽没有杂尘&#xff0c;只有光和希望 ❤️【Vue入门必备知识篇05】--- Vue Router路由一、前端路由的概念与原理&#xff08;1&#xff09;什么是路由&#xff08;2&#xff09;SPA 与前端路由&#xff08;3&#xff09;什么是前…

vue-router中的参数传递

文章目录前言一、本文章中练习需要的准备工作暴力引入bootstrap安装Vue Router二、项目基本架构1. 配置router文件2. 写入路由组件 一级路由3. 二级路由 实现传参3.1 使用params 传参3.1.1 在router文件下配置二级路由3.1.2 在view文件下新建二级路由组件3.1.3 在上一级路由组件…

uniapp**字符串转Json并提取字段值

uniapp字符串转Json并提取字段值 JSON有三种格式&#xff0c;每一种写法都和JS中的数据类型很像&#xff0c;可以很轻松的和JS中的数据类型互相转换 一、简单值的形式&#xff1a;JSON的简单值的格式对应着JS中的基础数据类型&#xff1a;数字 字符串 布尔值 注意事项&#…

这是我见过最牛逼的滑动加载前端框架

文章目录前言一、mescroll简介二、快速开始三、一分钟入门mescroll图片懒加载四、mescroll在vue中的使用五、小结前言 在手机端实现下拉刷新和下拉加载是最常见不过的需求了。今天大师兄就给大家分享一个非常精致的js框架&#xff1a;mescroll. 提示&#xff1a;以下是本篇文…

Cursor:GPT-4 驱动的强大代码编辑器

Cursor &#xff08;https://www.cursor.so/&#xff09;是 GPT-4 驱动的一款强大代码编辑器&#xff0c;可以辅助程序员进行日常的编码。下面通过一个实际的例子来展示 Cursor 如何帮助你编程。这个例子做的事情是网页抓取。抓取的目标是百度首页上的百度热搜&#xff0c;如下…

使用Python进行网站页面开发——HTML

目录 一、HTML基础语法 1.HTML是什么&#xff1f; 2.HTML基本结构 3.HTML注释 二、HTML常用标签介绍 1.文本标签 2.格式化标签 3.图片标签 4.超级链接标签 5.表格标签&#xff08;用来显示数据&#xff09; 6.表单标签&#xff08;用来接收数据&#xff09; 7.行内…

ACM模式下JavaScript(js)的输入输出 V8 Node

OJ在线编程常见输入输出练习场 ACM模式下分V8和node.js node.jsV8内置基本模块&#xff0c;相当于java中的JREJVMjava标准库 node就是带有能操作IO和网络库的V8引擎&#xff0c;提供了很多可调用的API使得JavaScript能够读写文件&#xff0c;网络请求&#xff0c;系统信息等…

【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」

文章目录1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置4.公网访问测试5.结语1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xff0c;比如网页…

前端项目如何部署到服务器实现网址访问

目录 前言 需要用到的东西 购买云服务器和域名 绑定域名 使用Xshell连接云服务器 下载Nginx 安装nginx 配置nginx 启动nginx 传输文件 配置防火墙 卸载自带的防火墙 安装iptables防火墙 最后 前言 写了那么久的前端&#xff0c;就想着让朋友们欣赏欣赏&#xff0…

ElementUI快速上手(jar包本地下载)

Element-ui是饿了么前端团队推出的基于vue进行开发的前端框架。 最近刚学了Element-ui&#xff0c;迫不及待练练手&#xff0c;却发现现成的组件样式用不了。引用官网的使用方法&#xff0c;如图&#xff1a; 展示的效果也是不尽人意&#xff0c;在百度的过程中发现可能是链接…

相对定位relative、绝对定位absolute、固定定位fixed

注&#xff1a;默认情况下的定位是 postion&#xff1a;static&#xff1b; 使用定位时&#xff0c;常常使用偏移量对位置进行描述&#xff1a;left、right、top、bottom定位时&#xff0c;使用z-indent可以元素的堆叠顺序&#xff0c;例&#xff1a;z-indent&#xff1a;1&…

Spring Security 权限控制

日积月累&#xff0c;水滴石穿 &#x1f604; 前言 项目版本Boot2.3.12.RELEASESecurity5.3.9.RELEASE 官网文档 在前面的文章中&#xff0c;所有的接口只需要登录就能访问。并没有对每个接口进行权限限制。 在正式的系统中&#xff0c;一个用户会拥有一个或者多个角色&#…

三种架构模式——MVC、MVP、MVVM

目录 前言 一、MVC&#xff08;Model-View-Controller&#xff09; 1、简介 2、框架图 二、MVP&#xff08;Model-View-Presenter&#xff09; 1、简介 2、框架图 三、MVVM&#xff08;Model-View-ViewModel&#xff09; 1、简介 2、框架图 四、总结 前言 MV系列框…