【React + Typescript】使用WebPack包管理、各种扩展插件组成的初始模板,开源协议:CC-BY-4.0

news2024/11/15 18:26:31

React + Typescript + Webpack 模板

  • 模板展示
  • 项目结构
  • 使用的部分扩展包
  • 页面配置代码
    • Layout 公共容器组件
    • 路由Js
    • package.json
  • 开源模板下载
  • TIP

模板展示

在这里插入图片描述

项目结构

在这里插入图片描述

使用的部分扩展包

📂 System
├── 📂 Plugin
│ ├── 📄 file-loader | 在处理图片文件时,Webpack 会将它们复制到输出目录并生成一个哈希值文件名
│ ├── 📄 style-loader && css-loader | Webpack 将会使用 css-loader 解析 CSS 文件,并使用 style-loader 将其转化为可应用的样式
│ ├── 📄 @babel/preset-typescript | 将 TypeScript 代码转换为 JavaScript 代码
│ └── 📄 @babel/core: “^7.23.5”
│ └── 📄 @babel/preset-typescript: “^7.23.3”
│ └── 📄 @types/styled-components: “^5.1.32”
│ └── 📄 @typescript-eslint/eslint-plugin: “^6.4.0”
│ └── 📄 eslint扩展全家桶
│ └── 📄 customize-cra: “^1.0.0”
│ └── 📄 react-app-rewired: “^2.2.1”
│ └── 📄 customize-cra: “^1.0.0”

页面配置代码

Layout 公共容器组件

import React, { ReactNode } from "react";
import CCV4 from "../cc-by-4.0"

interface LayoutProps {
  children: ReactNode;
}

const Layout: React.FC<LayoutProps> = ({ children } : any) => {
  const layoutStyle: React.CSSProperties = {
    minHeight: "100vh",
    display: "flex",
    flexDirection: "column",
  };
  const mainStyle: React.CSSProperties = {
    backgroundColor: `rgb(248,248,248)`,
    flex: 1,
  };
  const mainFooter: React.CSSProperties = {
    padding: "0 50px",
    display: "flex",
    alignItems: "center",
    justifyContent: "center",
    height: "50px",
    lineHeight: "50px"
  };

  return (
     <div style={layoutStyle}>
      <header>header</header>
      <main style={mainStyle}>{children}</main>
      <footer style={mainFooter}>
        <CCV4></CCV4>
      </footer>
    </div>
  );
};

export default Layout;

路由Js

import React, { Fragment, Component } from "react";
import Home from "../pages/Home/home";
import { BrowserRouter, Route, Routes } from "react-router-dom";

export default class index extends Component {
  render() {
    return (
      <Fragment>
        <BrowserRouter>
          <Routes>
            <Route path="/" element={<Home />} />
          </Routes>
        </BrowserRouter>
      </Fragment>
    );
  }
}

package.json

{
  "name": "blog-react-typescript",
  "version": "1.0.0",
  "author": "starlight-fungus || 東方幻想郷",
  "private": true,
  "dependencies": {
    "@babel/eslint-parser": "^7.23.3",
    "@babel/preset-react": "^7.23.3",
    "@testing-library/jest-dom": "^5.17.0",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "@types/jest": "^27.5.2",
    "@types/node": "^16.18.66",
    "@types/react": "^18.2.39",
    "@types/react-dom": "^18.2.17",
    "babel-loader": "^9.1.3",
    "css-loader": "^6.8.1",
    "file-loader": "^6.2.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router": "4.3.1",
    "react-router-dom": "^6.20.0",
    "react-scripts": "5.0.1",
    "style-loader": "^3.3.3",
    "styled-components": "^6.1.1",
    "typescript": "^5.3.2",
    "web-vitals": "^2.1.4",
    "webpack": "^5.89.0",
    "webpack-cli": "^5.1.4"
  },
  "scripts": {
    "start": "react-app-rewired start",
    "webpack-build": "webpack --config webpack.config.js",
    "build-production": "react-app-rewired build mode --production"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@babel/core": "^7.23.5",
    "@babel/preset-env": "^7.23.5",
    "@babel/preset-typescript": "^7.23.3",
    "@types/styled-components": "^5.1.32",
    "@typescript-eslint/eslint-plugin": "^6.4.0",
    "customize-cra": "^1.0.0",
    "eslint": "^8.0.1",
    "eslint-config-airbnb": "^19.0.4",
    "eslint-config-standard-with-typescript": "^40.0.0",
    "eslint-plugin-import": "^2.25.2",
    "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
    "eslint-plugin-promise": "^6.0.0",
    "eslint-plugin-react": "^7.33.2",
    "eslint-plugin-react-hooks": "^4.6.0",
    "react-app-rewired": "^2.2.1"
  }
}

开源模板下载

React + TypeScript + Webpack => 便捷模板项目(配置完毕)

TIP

本项目使用 cc by 4.0 协议,项目可以随意使用,若出现任何法律纠纷,与项目作者无关

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

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

相关文章

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(二)——数据清洗、转换

2 数据清洗、转换 此实验使用S3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 2 数据清洗、转换2.1 架构图2.2 数据清洗2.3 编辑脚本2.3.1 连接数据源&#xff08;s3&#xff09;2.3.2. 数据结构转换2.3.2 数据结构拆分…

力扣每日一题day23[20. 有效的括号]

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…

Python---面向对象的基本概念

对象 对象&#xff0c;object&#xff0c;现实业务逻辑的一个动作实体就对应着OOP编程中的一个对象&#xff01; 所以&#xff1a;① 对象使用属性&#xff08;property&#xff09;保存数据&#xff01;② 对象使用方法&#xff08;method&#xff09;管理数据&#xff01; …

python-学生管理|汉罗塔

1.编写程序&#xff0c;实现学生信息管理系统。 运行程序&#xff0c;在控制台输入“1”之后的结果如下所示&#xff1a; 学生管理系统 1.添加学生信息 2.删除学生信息 3.修改学生信息 4.显示所有学生信息 0.退出系统 请选择功能&#xff1a;1 请输入新学生的姓名:小红 请输入…

多波束EM2040D甲板单元更换CPU主板记录

前段时间多波束EM2040D甲板单元的CPU主板到货了。趁着船刚好靠港避风&#xff0c;我们带着这块主板去替换之前借来EM2040C的CPU主板。 1、CF卡替换问题 老主板有个CF卡&#xff0c;见下图。最好的解决方法就是将老CF卡替换新CPU主板上的新CF卡&#xff0c;因为这样改动最小。…

C++面试宝典第2题:逆序输出整数

题目 写一个方法&#xff0c;将一个整数逆序打印输出到控制台。注意&#xff1a;当输入的数字含有结尾的0时&#xff0c;输出不应带有前导的0。比如&#xff1a;123的逆序输出为321&#xff0c;8600的逆序输出为68&#xff0c;-609的逆序输出为-906。 解析 这道题本身并没有什么…

国际语音呼叫中心适用的行业有哪些?

国际语音呼叫中心的出现&#xff0c;使企业可以在全球范围内提供统一的客户支持&#xff0c;有效地解决客户服务、市场营销等国际性电话沟通问题&#xff0c;为企业提供了卓越的全球客户服务&#xff0c;确保客户在不同国家和地区之间获得一致的、高质量的支持。那么哪些行业适…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之文件管理(1)》(22)

《Linux操作系统原理分析之文件管理&#xff08;1&#xff09;》&#xff08;22&#xff09; 7 文件管理7.1 文件与文件系统7.1.1 文件7.1.3 文件系统及其功能 7.2 文件的组织结构7.2.1 文件的逻辑结构7.2.2 文件的物理结构一、顺序结构&#xff08;顺序文件或连续文件&#xf…

STM32串口通信初探:使用HAL库实现基本功能

在本文中&#xff0c;我们将探索如何使用STM32的HAL库来实现串口通信的基本功能。串口通信是一种常见的外设通信方式&#xff0c;用于在微控制器和其他外部设备之间进行数据传输。在STM32系列微控制器中&#xff0c;HAL库提供了简单且灵活的方法来实现串口通信。我们将重点讨论…

UE4 双屏分辨率设置

背景&#xff1a; 做了一个UI 应用&#xff0c;需要在双屏上进行显示。 分辨率如下&#xff1a;3840*1080&#xff1b; 各种折腾&#xff0c;其实很简单&#xff1a; 主要是在全屏模式的时候 一开始没有选对&#xff0c;双屏总是不稳定。 全屏模式改成&#xff1a;Windows 之…

nodejs微信小程序+python+PHP就业求职招聘信息平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Java 基础学习(五)面向对象编程-对象和类

1 类和对象 1.1 面向对象概述 1.1.1面向对象简史 面向对象编程思想最初的起源可以追溯到1960年的Simula语言&#xff0c;这被认为是第一个支持面向对象编程概念的语言。Simula引入了类、对象、继承等概念&#xff0c;将数据和操作进行封装。Simula的创始人奥利-约翰达尔&…

论文解读--2D Car Detection in Radar Data with PointNets

基于PointNets的雷达数据二维汽车检测 摘要 对于许多自动驾驶功能&#xff0c;高精度的感知车辆环境是一个重要的前提。现代高分辨率雷达传感器为每个目标产生多个雷达目标&#xff0c;这使得这些传感器特别适合于二维目标探测任务。这项工作提出了一种方法&#xff0c;使用Po…

Redis高可用之Sentinel哨兵模式

一、背景与简介 Redis关于高可用与分布式有三个与之相关的运维部署模式。分别是主从复制master-slave模式、哨兵Sentinel模式以及集群Cluster模式。 这三者都有各自的优缺点以及所应对的场景、对应的业务使用量与公司体量。 1、主从master-slave模式 【介绍】 这种模式可以采用…

win10、11系统安装班智达藏文输入法并正常使用(完美解决)

1. 结果图 2. 先闲聊两句 班智达输入法对于藏语初学者可谓是太好用了&#xff08;哈哈&#xff09;特别是联想提示的功能。不禁为开发团队点个赞。 表扬完了该批评批评了。班智达输入法的安装难度真是一言难尽。也许是开发者没有继续维护的缘故吧。想当年&#xff0c;哪个藏语…

视频的关键知识

1 引言 视频技术发展到现在已经有100多年的历史&#xff0c;虽然比照相技术历史时间短&#xff0c;但在过去很长一段时间之内都是最重要的媒体。 由于互联网在新世纪的崛起&#xff0c;使得传统的媒体技术有了更好的发展平台&#xff0c;应运而生了新的多媒体技术。而多媒体技…

MVSNeRF:多视图立体视觉的快速推广辐射场重建

MVSNeRF&#xff1a;多视图立体视觉的快速推广辐射场重建 摘要1 引言 摘要 在2021年&#xff0c;作者提出了MVSNeRF&#xff0c;一种新的神经渲染方法&#xff0c;在视图合成中可以有效地重建神经辐射场。与之前对神经辐射场的研究不同&#xff0c;我们考虑了对密集捕获的图像…

【模电】放大电路的组成原则

放大电路的组成原则 组成原则常用的两种共射放大电路 组成原则 通过对基本共射放大电路的简单分析可以总结出&#xff0c;在组成放大电路时必须遵循以下几个原则&#xff1a;    1. 必须根据所用放大管的类型提供直流电源&#xff0c;以便设置合适的静态工作点&#xff0c;并…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-B 需要环境或者解析可以私信 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&…

EI级 | Matlab实现TCN-GRU-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-GRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-GRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现TCN-GRU-Multihead-Attention…