使用 Vite 创建 React+TS+SW 项目并整合 AntDesign 、Scss 等组件或插件

简介: 本文记录了如何使用Vite创建一个React+TypeScript+Service Workers(SW)项目,并整合AntDesign组件库和Scss等插件,包括项目的创建、配置问题解决、AntDesign和Scss的整合方法。

前言

记录一下使用 Vite 创建 React+TS+SW 项目并整合 AntDesign 、Scss 等组件或插件。

一、使用 Vite 创建 React+TS+SW 项目

1.新建一个 temp 文件夹

(1)在桌面新建一个 temp 文件夹,然后在 VS Code 中打开此文件夹,打开一个终端;

2.创建一个 Vite 项目工程

(1)具体操作如下:

npm create vite@latest

(1) 输入项目名,如: vite-react-ts-scss-ant_design ,然后回车
? Project name: » vite-react-ts-scss-ant_design

(2) 选择 React 框架,回车
? Select a framework: » - Use arrow-keys. Return to submit.
    Vanilla
    Vue
>   React
    Preact
    Lit
    Svelte
    Others

(3) 选择数据类型,回车
? Select a variant: » - Use arrow-keys. Return to submit.
    TypeScript
>   TypeScript + SWC
    JavaScript
    JavaScript + SWC

(4) 创建完成,运行项目
Done. Now run: 

  cd vite-react-ts-scss-ant_design
  npm install
  npm run dev

二、解决一下配置问题

(1)找不到模块“vite”。你的意思是要将 \"moduleResolution\" 选项设置为 \"node\",还是要将别名添加到 \"paths\" 选项中?

(2)找不到模块“path”或其相应的类型声明。(执行 npm i @types/node -D 即可)

(3)未设置 "baseUrl" 时,不允许使用非相对路径。是否忘记了前导 "./"?

(4)解决方法,修改一下 vite.config.js、tsconfig.json、tsconfig.node.json 这三个配置文件即可。

【修改前】

vite.config.js

import {
    defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'

// https://vitejs.dev/config/
export default defineConfig({
   
  plugins: [react()],
})

tsconfig.json

{
   
  "compilerOptions": {
   
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src"],
  "references": [{
    "path": "./tsconfig.node.json" }]
}

tsconfig.node.json

{
   
  "compilerOptions": {
   
    "composite": true,
    "skipLibCheck": true,
    "module": "ESNext",
    "moduleResolution": "bundler",
    "allowSyntheticDefaultImports": true
  },
  "include": ["vite.config.ts"]
}

【修改后】

vite.config.js

import {
    defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import {
    resolve } from 'path'

// https://vitejs.dev/config/
export default defineConfig({
   
  plugins: [react()],
  resolve: {
   
    alias: {
   
      '@': resolve(__dirname, './src'),
    }
  },
})

tsconfig.json

{
   
  "compilerOptions": {
   
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "Node",
    "allowSyntheticDefaultImports": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "baseUrl": ".", // 未设置 "baseUrl" 时,不允许使用非相对路径。是否忘记了前导 "./"?
    "jsx": "react-jsx",
    "paths": {
   
      "@": ["src"],
      "@/*": ["src/*"]
    },

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src"],
  "references": [{
    "path": "./tsconfig.node.json" }]
}

tsconfig.node.json

{
   
  "compilerOptions": {
   
    "composite": true,
    "skipLibCheck": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "allowSyntheticDefaultImports": true
  },
  "include": ["vite.config.ts"]
}

三、整合 AntDesign 框架/UI组件库

1.导入依赖

npm i antd -D

2.按需引入

(1)修改 src/App.tsx,如引入 antd 的按钮组件,保存即可在页面看到效果。

import React from 'react'
import {
    Button } from 'antd'

const App = () => (
  <div className="App">
    <Button type="primary">Button</Button>
  </div>
)

export default App

四、整合 SCSS 插件

1.导入依赖

npm i sass -D
npm i scss -D

2.使用方式

(1)例如对 App.tsx 进行使用,首先修改 App.tsx 文件,然后新建 App.module.scss 文件,将 scss 样式引入 App.tsx 文件即可。

App.tsx

import {
    Button } from 'antd'
import style from './App.module.scss'

function App() {
   
  return (
    <>
      <div className={
   style.appContainer}>
        <div className={
   style.box}>
          <h1 className={
   style.welcome}>Vite + React</h1>
          <Button type="primary">Button</Button>
        </div>
      </div>
    </>
  )
}

export default App

App.module.scss

.appContainer {
   
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  text-align: center;

  .box {
   
    display: inline-table;
    width: 100%;
    height: auto;
    position: absolute;
    margin: auto;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;

    .welcome {
   
      padding-bottom: 10px;
      color: rgb(0, 255, 115);
      font-weight: normal;
    }

    :global(.ant-btn) {
   
      width: 250px;
    }
  }
}

到此项目整合完毕,传送门如下。

vite-react-ts-scss-ant_design: 这是一个基于 Vite 构建的 React + TS 项目,以及整合了 Scss、AntDesign5 等组件或插件。

目录
相关文章
|
12天前
|
前端开发 开发者
React 函数组件与类组件对比
【10月更文挑战第4天】本文详细比较了React中的函数组件与类组件。函数组件是一种简单的组件形式,以纯函数的形式返回JSX,易于理解与维护,适用于简单的UI逻辑。类组件则是基于ES6类实现的,需要重写`render`方法并能利用更多生命周期方法进行状态管理。文章通过示例代码展示了两者在状态管理与生命周期管理上的差异,并讨论了常见的问题如状态更新异步性与生命周期管理的复杂性,最后给出了相应的解决方法。通过学习,开发者可以根据具体需求选择合适的组件类型。
37 8
|
10天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
55 2
|
9天前
|
前端开发 JavaScript 调度
React 组件状态(State)
10月更文挑战第8天
10 1
|
16天前
|
JavaScript 前端开发 安全
使用 TypeScript 加强 React 组件的类型安全
【10月更文挑战第1天】使用 TypeScript 加强 React 组件的类型安全
32 3
|
18天前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
35 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
9天前
|
前端开发 JavaScript API
React将组件作为属性传递的最佳实践
本文探讨了在React中将组件作为属性传递的三种常见方式:作为元素传递、作为组件传递、作为函数传递。通过构建带图标的按钮组件,对比分析了每种方式的优缺点,最终推荐将组件作为函数传递,因为它提供了更好的可控性、灵活性和可扩展性。
15 0
|
10天前
|
JavaScript 前端开发 算法
写 React / Vue 项目时为什么要在列表组件中写 key
在React或Vue项目中,为列表组件中的每个元素添加唯一的key属性,有助于框架高效地更新和渲染列表。Key帮助虚拟DOM识别哪些项已更改、添加或删除,从而优化性能并减少不必要的重新渲染。
|
12天前
|
前端开发 JavaScript 开发者
深入理解React Hooks:提升前端开发效率的关键
【10月更文挑战第5天】深入理解React Hooks:提升前端开发效率的关键
|
7天前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
12天前
|
前端开发 JavaScript API
探索React Hooks:前端开发的革命性工具
【10月更文挑战第5天】探索React Hooks:前端开发的革命性工具