React + TypeScript 项目初始化配置

Posted 嘻嘻的妙妙屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React + TypeScript 项目初始化配置相关的知识,希望对你有一定的参考价值。

React + TypeScript 项目初始化配置

新建项目

新建 React + TypeScript 项目:

pnpm create @vitejs/app

进入项目目录,安装依赖并运行:

pnpm install
pnpm dev

运行成功

项目配置

入口文件

在 src 目录下创建 bootstrap.tsx 文件,并将入口文件的内容放到里面,然后将 bootstrap 引入到入口文件 index.ts 中:

bootstrap.tsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'

ReactDOM.createRoot(document.getElementById('root')!).render(
  <React.StrictMode>
    <App/>
  </React.StrictMode>
)

index.ts

import './bootstrap'

修改 index.html 中入口文件路径:

安装 Mobx

安装 mobx、mobx-react-lite 依赖:

pnpm install mobx mobx-react-lite --save

新建 src/store/globalStore.ts 文件:

globalStore.ts

import makeAutoObservable from 'mobx'

class GlogalStore 
  constructor() 
    makeAutoObservable(this)
  


export default new GlogalStore()

安装 Sass

安装 sass:

npm install sass --save-dev

新建 src/global.d.ts 声明文件:

global.d.ts

declare module '*.scss'

新建首页

新建 src/pages/Index/index.module.scss 文件:

.container 
    color: blue;

新建 src/pages/Index/index.tsx 文件:

Index/index.tsx

import  observer  from 'mobx-react-lite'
import styles from './index.module.scss'

const Index = (props: any) => 
  return (
    <div className= styles.container >
        项目初始化
    </div>
  )


export default observer(Index)

配置路由

安装路由依赖:

pnpm install react-router-dom -save

如果你只需要做网页应用的话,你需要的是 react-router-dom 而不是 react-router 这个包。它们的区别是,后者包含了 react-native 中需要的一些组件。

将 App.tsx 更名为 RouterComp.tsx:

RouterComp.tsx

import  Routes, Route  from 'react-router-dom';
import Index from './pages/Index/Index'

// 用来作为 404 页面的组件
const NotFound = () => 
  return <div>404</div>


const RouterComp = () => (
  <>
    <Routes>
        <Route path="/" element=<Index /> />
        <Route path="*" element=<NotFound /> />
    </Routes>
  </>
)

export default RouterComp;

修改 bootstrap.tsx:

bootstrap.tsx

import ReactDOM from 'react-dom/client'
import  BrowserRouter as Router  from 'react-router-dom'
import RouterComp from './RouterComp'

ReactDOM.createRoot(document.getElementById('root')!).render(
  <Router>
    <RouterComp />
  </Router>
)

配置 vite.config.ts

vite.config.ts

import  defineConfig  from 'vite'
import join from 'path'
import react from '@vitejs/plugin-react'

function resolve(dir) 
  return join(__dirname, dir)


// https://vitejs.dev/config/
export default defineConfig(
  root: process.cwd(), // 入口主文件项目的 index.html 当前路径开始
  // 配置服务器
  server: 
    https: false,
    cors: false, // 默认启用并允许任何源
    host: true, // 在 dev 场景下尽量显示声明 ip、port,防止`vite`启动时ip、port自动获取机制导致不准确的问题
    port: 3000, // 端口
  ,
  // 打包配置
  build: 
    assetsInlineLimit: 40960, // 40kb
    outDir: 'dist', // 指定输出路径(相对于项目根目录)
    assetsDir: 'assets', // 指定生成静态资源的存放路径(相对于build.outDir)
    target: 'esnext',
    minify: false,
    cssCodeSplit: true,
    rollupOptions: 
      output: 
        minifyInternalExports: false,
      ,
    ,
  ,
  // 插件配置
  plugins: [
    react()
  ],
  resolve: 
    alias: 
      'src': resolve('./src'),
    ,
    extensions: ['.ts', '.tsx', '.js', '.jsx'],
  ,
)

此时,我们可以看到 root: process.cwd() 这个入口配置报错了,官网说这个是缺少了 node 的类型定义,运行它提示的命令的就行了:

pnpm @types/node --save-dev

配置 tsconfig.json

我们会发现,在 vite.config.ts 配置完主目录 alias 后依然报错,还需配置 tsconfig.json 即可解决:

tsconfig.json


  "compilerOptions": 
    "paths": 
      "src/*": ["./src/*"],
    
  

配置 Eslint

安装 eslint 依赖:

npm install @typescript-eslint/parser eslint eslint-plugin-standard @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-promise  --save-dev

在根目录下创建 .eslintrc.js 文件:

.eslintrc.js

const OFF = 0
const WARN = 1
const ERROR = 2
module.exports = 
  env: 
    browser: true,
    commonjs: true,
    es6: true,
    node: true,
  ,
  extends: 'eslint:recommended',
  parserOptions: 
    ecmaVersion: 6,
    sourceType: 'module',
    ecmaFeatures: 
      jsx: true,
      experimentalObjectRestSpread: true,
    ,
  ,
  parser: 'babel-eslint',
  plugins: ['react'],
  rules: 
    // 详细的规则
    quotes: [ERROR, 'single'], //单引号
  ,

在根目录下创建 .eslintignore 文件:

.eslintignore

# 自动生成的文件
App.jsx
main.jsx


# 配置文件
.eslintrc.js
vite.config.js
jsconfig.json

# 构建文件
dist/*
build/

# 其他

配置 Ant Design

安装 antd:

pnpm install antd --save

在入口文件中引入 antd 的全局样式:

bootstrap.tsx

import 'antd/dist/antd.css'

初始化全局样式

新建 src/css/reset.scss:

reset.scss

/* http://meyerweb.com/eric/tools/css/reset/ 
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video 
	margin: 0;
	padding: 0;
	border: 0;
	font-size: 100%;
	font: inherit;
	vertical-align: baseline;

/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section 
	display: block;

body 
	line-height: 1;

ol, ul 
	list-style: none;

blockquote, q 
	quotes: none;

blockquote:before, blockquote:after,
q:before, q:after 
	content: '';
	content: none;

table 
	border-collapse: collapse;
	border-spacing: 0;

新建 src/css/global.scss,在该全局样式文件中引入:

@import './reset.scss';

最后,在 vite.config.ts 文件中配置全局样式路径:

vite.config.ts

  css: 
    //css预处理
    preprocessorOptions: 
      scss: 
        /**
		 * 引入var.scss全局预定义变量,
		 * 如果引入多个文件,
		 * 可以使用
		 * '@import "src/assets/scss/globalVariable1.scss";@import "src/assets/scss/globalVariable2.scss";'
		 * 这种格式
		 **/
        additionalData: '@import "src/css/global.scss";',
      ,
    ,
  ,

项目初始化完成

运行项目如下图所示:

则项目初始化成功。

以上是关于React + TypeScript 项目初始化配置的主要内容,如果未能解决你的问题,请参考以下文章

umi + react+ mobx+ typescript项目

Go+GraphQL+React+Typescript搭建简书项目——项目初始化

个人笔记2023年搭建基于webpack5与typescript的react项目

React+TypeScript

Typescript 中的 React + Firebase 云功能无法部署

使用 wmonk vs Microsoft 的 Typescript 创建 React App (CRA)?