当前位置: 首页 > article >正文

VITE+VUE3+TS环境搭建

前言(与搭建项目无关):

可以安装一个node管理工具,比如nvm,这样可以顺畅的切换vue2和vue3项目,以免出现项目跑不起来的窘境。我使用的nvm,当前node 22.11.0

 

目录

搭建项目

添加状态管理库,使用pinia

 添加全局组件模版

加入路由vue-router


  • 搭建项目

 (直接贴代码,都准备使用vite了,肯定一看就明白)

npm init vite data-analysis
Need to install the following packages:
create-vite@5.5.5
Ok to proceed? (y) y

 npx
> create-vite data-analysis

√ Select a framework: » Vue
√ Select a variant: » TypeScript

Scaffolding project in D:\projects\data-analysis...

Done. Now run:

 cd data-analysis
 npm install
 npm run dev

如上你就能得到一个超级干净(啥都没有)的项目结构。接下来需要补齐一些常用的东西,文件夹按照自己的习惯新建即可,示例如下。

 

  • 添加状态管理库,使用pinia

npm i pinia -S

 在store下创建index.ts,同时创建modules文件夹将state模块化

import { appStore } from "./modules/app";
import { createPinia } from "pinia";

const store: any = createPinia();
// const store: any = {}
export const registerStore = () => {
  store.appStore = appStore();
};

export default store;


// modules文件夹下新建app.ts,内容如下
import { defineStore } from "pinia";
export const appStore = defineStore("appStore", {
  state: () => ({
    scrollFlag: false,
    pageLoading: false,
  }),
  actions: {
    setScrollFlag(flag: any) {
      this.scrollFlag = flag;
    },
    setPageLoading(flag: any) {
      this.pageLoading = flag;
    },
  },
});

main.ts中导入store

import { createApp } from "vue";
import App from "./App.vue";
import store, { registerStore } from "./store";
const setupAll = async () => {
  const app = createApp(App);
  // 注册 Pinia
  app.use(store);
  // 注册 自定义指令
  registerStore();
  app.mount("#app");
};

setupAll();

 重写App.vue文件

<template>
  <el-config-provider :size="size">
    <router-view />
  </el-config-provider>
</template>

<script setup lang="ts">
import { ref} from "vue";
const size = ref('small');
</script>
  •  添加全局组件模版

// 在layout文件夹下新建index.vue用做路由组件模版(路径可自行修改)
// 这一步在搭建后台管理项目的时候很重要,可以把菜单栏封装到此处
<template>
  <div class="web-main-container">
    通用组件模版
    <router-view />
  </div>
</template>

<script setup name="indexPage">

</script>
// 添加scss之后编译会报错,需要npm i sass -D
<style lang="scss">
@import "@/assets/styles/reset.scss";
.ellipsis {
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
</style>
  • 加入路由vue-router

npm i vue-router -S //安装路由

在router下创建index.ts

import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";

import Layout from "@/layout/index.vue";
// 配置静态路由
export const constantRoutes: RouteRecordRaw[] = [
  {
    path: "/",
    redirect: "home",
    component: () => Layout,
    children: [
      {
        path: "home",
        name: "首页",
        component: () => import("../views/home/index.vue"),
        meta: { title: "首页", hidden: true },
      },
    ],
  },
  {
    path: "/404",
    component: () => import("../views/404.vue"),
  },
];

export const router = createRouter({
  history: createWebHistory(),
  routes: constantRoutes,
});

 在main.js里引入router

import { createApp } from "vue";
import App from "./App.vue";
import store, { registerStore } from "@/store";
import { router } from "./router";
const setupAll = async () => {
  const app = createApp(App);
  // 注册路由
  app.use(router);
  // 注册 Pinia
  app.use(store);
  // 注册 自定义指令
  registerStore();
  app.mount("#app");
};

setupAll();

 编译之后可能会报错,vite.config.ts加以下配置

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
// https://vite.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    extensions: [
      ".mjs",
      ".js",
      ".ts",
      ".jsx",
      ".tsx",
      ".json",
      ".scss",
      ".css",
    ],
    // 配置别名
    alias: {
      "@": resolve(__dirname, "./src"),
      "vue-i18n": "vue-i18n/dist/vue-i18n.cjs.js",
    },
    //去掉scss编译警告
    css: {
      preprocessorOptions: {
        scss: {
          api: "modern-compiler",
        },
      },
    },
  },
});

路由守卫,接口调用,权限配置等其他功能下一次在写


http://www.kler.cn/a/411163.html

相关文章:

  • 使用client-go在命令空间test里面对pod进行操作
  • 快速理解微服务中Gateway的概念
  • esp32触发相机
  • C++中的原子操作:原子性、内存顺序、性能优化与原子变量赋值
  • 5.5 W5500 TCP服务端与客户端
  • Easyexcel(6-单元格合并)
  • TortoiseGit 将本地已有仓库推送到远程
  • 【RAG多模态】再看多模态RAG进行文档问答的方案
  • k8s rainbond centos7/win10 -20241124
  • java:拆箱和装箱,缓存池概念简单介绍
  • 基于springboot的HttpClient、OKhttp、RestTemplate对比
  • intellij idea控制台 visual stadio dev c++ keil pycharm python 输出乱码解决方案最终版 java
  • Springboot自带注解@Scheduled实现定时任务
  • 自动泊车“哐哐撞大墙”,小米SU7智驾功能bug缠身?
  • 组合模式详解及Java实现
  • 【环境搭建】更新Docker Compose到v2.x版本以支持--profile选项
  • HTML 常用标签属性汇总一〈body〉标签
  • Cocos编辑器
  • 【算法一周目】滑动窗口(2)
  • Linux宝塔部署wordpress网站更换服务器IP后无法访问管理后台和打开网站页面显示错乱
  • C语言函数递归经典题型——汉诺塔问题
  • 【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总
  • Qt SQL模块概述
  • 【数据结构实战篇】用C语言实现你的私有队列
  • SpringBoot使用MySQL数据库,配置alibaba druid数据库连接池
  • 力扣 73. 矩阵置零