首页 > 其他分享 >编辑器项目搭建(一)项目初始化

编辑器项目搭建(一)项目初始化

时间:2024-10-09 22:00:57浏览次数:5  
标签:初始化 项目 -- 编辑器 pnpm import src true vite

技术选择

底层:Vite(设计维护都较友好)+React+Ts(项目越来越大并复杂,需标记变量类型,有助于项目管理)
路由:React Router
状态管理:Zustand
UI:AntD
其他:iconfont+less+axios+Immer+loadash+react-color

创建一个项目

用vite开一个Reate TS项目
pnpm create vite Flavor --template reate-ts
在vite官网:https://vitejs.cn/vite3-cn/guide/#trying-vite-online

注:在VSCode中的终端(需要先安装node以及pnpm相关),之后在自定义目录下创建项目:

相关命令如下
npm config set registry https://registry.npmmirror.com  --npm包下载源
fnm env  --输出当前node环境配置
npm install -g pnpm@latest  --安装js包管理工具
pnpm run build  --执行项目中定义的构建过程
pnpm run generate --执行在项目中定义的生成过程
fnm env --use-on-cd --shell power-shell | Out-String | Invoke-Expression
--配置 fnm 使其在当前 PowerShell 会话中有效,并确保在切换到包含 .nvmrc 或 .node-version 文件的目录时,自动使用该文件中指定的 Node.js 版本
pnpm create vite Flavor --template react-ts  --此操作前请先切换到项目预设路径下

创建成功打印如下:
image
对应项目文件夹Flavor打开:
image
此处项目暂时未启用pnpm导致依赖不到相关的js包,此时:
image
之后对项目中某些内容进行精简,如main.tsx,原本样式
image
注意此处需要安装immer
image
修改后代码如下
image

main.tsx
import ReactDOM from 'react-dom/client'
import App from './App.tsx'
import './index.css'
import "antd/dist/reset.css"
// 在你的应用程序入口文件
import {enableMapSet} from "immer"

enableMapSet();

ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
  <App />
)

同时需要引入:pnpm add antd
image
之后启动项目
image
界面如下所示
image
配置文件tsconfig.json

tsconfig.json
{
  "compilerOptions": {
    "allowUmdGlobalAccess":true,
    "allowImportingTsExtensions": true,
    "useDefineForClassFields":true,
    "lib":["DOM","DOM.Iterable","ESNext"],
    "skipLibCheck":true,
    "esModuleInterop":false,
    "allowSyntheticDefaultImports":true,
    "strict": true,
    "forceConsistentCasingInFileNames":true,
    "module": "ESNext",
    "moduleResolution":"Node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react",
    "allowJs": false,
    "target": "ESNext",
    "paths":{
      "src/*":["./src/*"]
    }
  },
  "include": ["src","**/*.ts","**/*.tsx"],
  "references":[{"path":"./tsconfig.node.json"}]
}

解释:

  1. "allowUmdGlobalAccess": true: 允许在模块中访问 UMD 全局变量,对于使用一些第三方库很有帮助。
  2. "allowImportingTsExtensions": true: 允许在导入语句中使用 TypeScript 文件扩展名。
  3. "useDefineForClassFields": true: 对于类字段使用 defineProperty 而不是简单的赋值,提高代码的兼容性。
  4. "lib": ["DOM", "DOM.Iterable", "ESNext"]: 指定要包含在编译中 JavaScript 语言功能和浏览器 API。
  5. "skipLibCheck": true: 跳过对所有声明文件的类型检查。这可以加快编译速度。
  6. "esModuleInterop": false: 禁用 ES 模块与 CommonJS 模块的自动互通。
  7. "allowSyntheticDefaultImports": true: 允许从没有默认导出的模块中进行默认导入。
  8. "strict": true: 启用所有严格类型检查选项。
  9. "forceConsistentCasingInFileNames": true: 强制在导入/require语句中使用一致的大小写。
  10. "module": "ESNext": 指定生成代码的模块系统为 ECMAScript 下一个版本。
  11. "moduleResolution": "Node": 指定模块解析策略为 Node.js 模块解析。
  12. "resolveJsonModule": true: 允许导入 JSON 文件。
  13. "isolatedModules": true: 确保每个文件都可以独立编译(用于 Babel 等工具)。
  14. "noEmit": true: 不生成输出文件,仅进行类型检查。
  15. "jsx": "react": 指定 JSX 代码的生成方式为 React 风格。
  16. "allowJs": false: 不允许编译 JavaScript 文件。
  17. "target": "ESNext": 指定生成代码的 ECMAScript 目标版本为最新版本。
  18. "paths": { "src/": ["./src/"] }: 设置模块解析时的路径映射,将 src/* 映射到 ./src/*。
  19. "include": ["src", "/*.ts", "/*.tsx"]: 指定要编译的文件包括 src 目录下的所有 TypeScript 和 TSX 文件。
    对应的tsconfig.node.json:
tsconfig.node.json
{
  "compilerOptions": {
    "target": "ES2022",
    "lib": ["ES2023"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "isolatedModules": true,
    "moduleDetection": "force",
    "noEmit": false,
    "composite": true,
    "declaration": true,
    "declarationMap": true,
    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["vite.config.ts"]
}

之后配置vite.config.ts文件,其中vite-tsconfig-paths也需要引入:
pnpm install vite-tsconfig-paths
image
代码如下

vite.config.ts
import { defineConfig } from 'vite'
import tsconfigPaths from "vite-tsconfig-paths"
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  server:{
    proxy:{
      "/api":"http://template.josephxia.com"
    }
  },

  plugins: [tsconfigPaths(),react()],

  css:{
    modules:{
      hashPrefix: "prefix"
    },

    preprocessorOptions: {
      less: {
        javascriptEnabled: true
      }
    }
  }
})

之后引入iconfront,打开阿里矢量,下载图标
image
解压后放在public路径下
image
在index.html下添加代码
<link rel="stylesheet" href="./public/iconfront/iconfont.css" />
image
之后可以看到对应图标渲染到页面中
image

标签:初始化,项目,--,编辑器,pnpm,import,src,true,vite
From: https://www.cnblogs.com/ayy-200248/p/18445745

相关文章

  • 高效开发Maven架构设计图解/掌握项目工程自动化技巧(精通篇四)
    Maven是一个项目管理和构建自动化工具,主要服务于基于Java的项目。它使用一个名为POM(ProjectObjectModel)的XML文件来描述项目的构建过程、依赖、插件等信息。肖哥弹架构跟大家“弹弹”高并发锁,关注公号回复‘mvcc’获得手写数据库事务代码欢迎点赞,关注,评论。关......
  • 1:1仿PG电子PP电子 后台可控 多个模板选择源码全开源 像项目展示
    前端首页页面前端登录界面前端支持多套UI支持多种语言效果后端游戏控制界面后端游戏添加界面后端模板切换页面仅供参考!......
  • 煤矿项目车载设备又多又复杂?我们建议这样做
    煤矿生产环境复杂多变,存在诸多不确定因素,如高温、低氧、多尘、黑暗等,这些都给煤矿生产带来了极大的安全隐患。传统的煤矿生产管理方式依赖人工巡检,存在效率低下、盲区监控等问题。现在越来越多的煤矿行业开始采用矿车搭配车载设备的方式,实现对井下作业的安全监管。我们近期也遇......
  • docker发布项目的一些坑
     使用docker发布应用分为两种方式1.使用源码直接发布:在创建项目的时候,vs会自动生成一个叫Dockerfile的文件,我们一般会根据这个文件来制作镜像,然后将镜像运行在docker容器中。Dockerfile如下所示#Seehttps://aka.ms/containerfastmodetounderstandhowVisualStudiouses......
  • 深度学习对对联:探索seq2seq-couplet项目的智能对联生成
    引言对联作为中国传统文化的瑰宝,一直以其对仗工整、意境深远而备受推崇。随着人工智能技术的发展,利用深度学习来生成对联成为了一个引人注目的研究方向。本文将深入探讨seq2seq-couplet项目,这是一个利用序列到序列(seq2seq)模型来实现智能对联生成的开源项目。seq2seq-couple......
  • Android Studio启动项目下载gradle失败的问题
    解决AndroidStudio项目初始化下载gradle过慢问题解决方法将谷歌官方源替换为国内阿里云或者腾讯云源解决方案替换掉谷歌原地址:官网地址:https://services.gradle.org/distributions/阿里云镜像Gradle下载地址:https://mirrors.aliyun.com/macports/distfiles/gradle/腾讯......
  • 尚硅谷vue3实战项目--硅谷甄选项目笔记
    硅谷甄选运营平台此次教学课程为硅谷甄选运营平台项目,包含运营平台项目模板从0到1开发,以及数据大屏幕、权限等业务。此次教学课程涉及到技术栈包含:vue3+TypeScript+vue-router+pinia+element-plus+axios+echarts等技术栈。一、vue3组件通信方式通信仓库地址:https://gitee.c......
  • 某国有资本运营中心人才选拔项目纪实
    某国有资本运营中心人才选拔项目纪实【客户行业】 政府与事业单位【问题类型】 人才招聘选拔【客户背景】在三年国企改革过程中,南方某省政府为响应国家政策,提出组建专业化国有资本投资运营公司,大力开展专业化资本运营,推动国有资本进退留转市场出清和专业化重组的政策方针......
  • 项目实战——简单计算器
    代码演示:whileTrue:try:op=input('请输入一个四则运算算式:')if'+'inop:a=op.split('+')result=int(a[0])+int(a[1])print(result)elif'-'inop:......
  • Java基于SpringBoot的高校体育运动会比赛项目报名系统 +Vue[毕业设计]
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍在高等教育体系中,体育运动会不仅是增强学生体质、培养团队精神的重要途径,也是校园文化的重要组成部分。然而,传统的高校体育运动会报名方式往往存在诸多不便,如报名流程繁琐、信息更......