Vue3+TS+Vite+Pinia 搭建项目

搭建项目代码

npm i vite -g

npm create vite@latest

vue配置根目录详细步骤(用@代表src目录)

安装

加载 path 依赖

npm i path
npm i @types/node

配置

tsconfig.json

{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "skipLibCheck": true,
    "baseUrl": ".",
    "paths": {
      "@/*": [ "src/*" ]
    },
    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "preserve",

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

主要是添加

"baseUrl": ".",
    "paths": {
      "@/*": [ "src/*" ]
    },

此时,已经可以完成编译,将导入地址调整为 @/components/HelloWorld.vue,可以看到界面可以正常展示,说明 @ 符号已经生效。

但是如果有使用 @ 导入 .ts 文件时,VS Code 会提示找不到路径,虽然不影响编译,但是看着难受。

配置 tsconfig.json 文件,在 compilerOptions 选择中增加 baseUrl 及 paths 配置

{
    "compilerOptions": {
        // ...省略其它配置项
        "baseUrl": ".",
        "paths": {
            "@/*": [ "src/*" ]
        }
    }
}

normalize.css

安装

npm i normalize.css

引入

// 在 main.js 中引入import’normalize.css’;

reset.css

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,
font,
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,
caption {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    font-size: 100%;
    vertical-align: baseline;
    background: transparent;
}

table,
tbody,
tfoot,
thead,
tr,
th,
td {
    margin: 0;
    padding: 0;
    outline: 0;
    font-size: 100%;
    vertical-align: baseline;
    background: transparent;
}

button,
input,
textarea {
    margin: 0;
    padding: 0;
}

/* form elements 表单元素 */body,
button,
input,
select,
textarea {
    font: normal 12px/1.5'\5FAE\8F6F\96C5\9ED1', tahoma, arial;
}

/*设置的字体,行高*/h1,
h2,
h3,
h4,
h5,
h6,
th {
    font-size: 100%;
    font-weight: normal;
}

/*重置标题*/address,
cite,
dfn,
var {
    font-style: normal;
}

/* 将斜体扶正 */code,
kbd,
pre,
samp {
    font-family: 'courier new', courier, monospace;
}

/* 统一等宽字体 */
small {
    font-size: 12px;
}

/* 小于 12px 的中文很难阅读,让 small 正常化 */ul,
ol {
    list-style: none;
}

/* 重置列表元素 */button,
input[type="submit"],
input[type="button"] {
    cursor: pointer;
}

input[type="radio"],
input[type="checkbox"],
input[type="submit"],
input[type="reset"] {
    vertical-align: middle;
    cursor: pointer;
    border: none;
}

/** 重置文本格式元素 **/a {
    text-decoration: none;
}
a:hover {
    text-decoration: underline;
}
a:focus {
    outline: 0;
}
sup {
    vertical-align: text-top;
}

/* 重置,减少对行高的影响 */
sub {
    vertical-align: text-bottom;
}

/** 重置表单元素 **/legend {
    color: #000;
}

/* for ie6 */fieldset,
img {
    border: 0;
}

/* img 搭车:让链接里的 img 无边框 */button,
input,
select,
textarea {
    background: transparent;
    font-size: 100%;
    outline: 0;
}


/* 使得表单元素在 ie 下能继承字体大小 *//* 注:optgroup 无法扶正 */table {
    border-collapse: collapse;
    border-spacing: 0;
}

td,
th {
    vertical-align: middle;
}


/** 重置表格元素 **//* 重置 HTML5 元素 */article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section,
summary,
time,
mark,
audio,
video {
    display: block;
    margin: 0;
    padding: 0;
}

/*回复标签重置*/blockquote,
q {
    quotes: none;
}

blockquote:before,
blockquote:after,
q:before,
q:after {
    content: '';
    display: none;
}

引入

// 在 main.js 中引入import’@/assets/css/reset.css’;

vue-router 路由配置

1. 安装

npm i vue-router@4

2. 配置

@/router/index.ts

//在vue-router引入createRouter和createWebHashHistory
import { createRouter, createWebHashHistory } from "vue-router";
//引入组件,及要跳转到的页面,也可以直接写在routes中的component里
import Login from '@/views/Login/index.vue'
import Register from '@/views/Register/index.vue'

//定义路由,每个路由都需要映射到一个组件。
const routes = [
    {
        path: '/',
        component: Login
    },
    {
        path: '/register',
        component: Register
    },
]

//创建路由实例并传递routes配置
const router = createRouter({
    //内部提供了history模式的实现。为了简单起见,我们在这里使用hash模式。
    history: createWebHashHistory(),
    routes, //'routes: routes' 的缩写
})

//暴露出router实例。方便在其他组件更改路由
//这样可以在任意组件中以 this.$router的形式访问它,并且以this.$route的形式访问当前路由
export default router;

@/main.ts

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'

createApp(App).use(router).mount('#app')

使用

<script setup lang="ts">

</script>

<template>
  <div>
    <router-link to="/">TO login</router-link>
    <hr>
    <router-link to="/register">TO register</router-link>
  </div>
  <router-view></router-view>
</template>

<style scoped></style>

Pinia

安装

npm install pinia

引用

import { createPinia } from "pinia"; createApp(App).use(router).use(createPinia()).mount('#app')

根目录新建store/index.js中写入

import { defineStore } from 'pinia'
 
export const useStore = defineStore('storeId', {
  state: () => {
    return {
      counter: 0,
    }
  },
  getters:{},
  actions:{}
})

组件使用

<template>
    <div>
        <h1>Resiter!!!!</h1>
        <p>{{ store.counter }}</p>
    </div>
</template>
<script setup>
import { useStore } from '@/store'
const store = useStore();
</script>

Axios

详细地址

https://blog.csdn.net/weixin_59916662/article/details/127336840

安装

npm i axios

使用

创建src/utils/request.ts

import axios from 'axios'
// 创建axios实例
const request = axios.create({
    baseURL: '',// 所有的请求地址前缀部分(没有后端请求不用写)
    timeout: 80000, // 请求超时时间(毫秒)
    withCredentials: true,// 异步请求携带cookie
    // headers: {
    // 设置后端需要的传参类型
    // 'Content-Type': 'application/json',
    // 'token': x-auth-token',//一开始就要token
    // 'X-Requested-With': 'XMLHttpRequest',
    // },
})

// request拦截器
request.interceptors.request.use(
    config => {
        // 如果你要去localStor获取token,(如果你有)
        // let token = localStorage.getItem("x-auth-token");
        // if (token) {
        //添加请求头
        //config.headers["Authorization"]="Bearer "+ token
        // }
        return config
    },
    error => {
        // 对请求错误做些什么
        Promise.reject(error)
    }
)

// response 拦截器
request.interceptors.response.use(
    response => {
        // 对响应数据做点什么
        return response.data
    },
    error => {
        // 对响应错误做点什么
        return Promise.reject(error)
    }
)
export default request

Sass

安装

npm i sass sass-loader -D

配置

在vite.config.ts中配置css预处理器

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";

import { resolve } from "path"; // 引入方法

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: [ // 配置 @ 指代 src
      {
        find: "@",
        replacement: resolve(__dirname, "./src"),
      },
    ],
  },
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: '@import "@/assets/style/global.scss";',
      },
    }
  }
});

创建全局样式文件

我们这里默认加载global.scss中的样式,那么我们就需要创建一个这样的文件:

$primary-color: red; // 主题色

使用

<template>
    <div>
        <h1>Resiter!!!!</h1>
        <p>{{ store.counter }}</p>
    </div>
</template>
<script setup>
import { useStore } from '@/store'
const store = useStore();
</script>
<style scoped lang="scss">
div {
    color: $primary-color; // 主题色
}
</style>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于使用 Vue 3、TypeScriptVite搭建项目,并结合 Pinia 进行状态管理,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了 Node.js 和 npm(或者使用 yarn)。 2. 创建一个新的项目文件夹,并进入该文件夹。 3. 在终端中运行以下命令来初始化一个新的 Vue 3 项目: ``` npm init vite@latest ``` 在初始化过程中,选择使用 Vue 3、TypeScript 和默认配置。 4. 进入项目文件夹并安装依赖: ``` cd <project-folder> npm install ``` 5. 接下来,安装 Pinia: ``` npm install pinia ``` 6. 在 `src` 目录下创建一个 `store` 文件夹,并在其中创建名为 `index.ts` 的文件。 7. 在 `index.ts` 中编写你的 Pinia store。例如,你可以创建一个名为 `counter` 的 store,并且在其中定义一个状态和一些操作: ```typescript import { defineStore } from 'pinia'; export const useCounterStore = defineStore('counter', { state: () => ({ count: 0, }), actions: { increment() { this.count++; }, decrement() { this.count--; }, }, }); ``` 8. 在应用的入口文件 `main.ts` 中导入并使用 Pinia: ```typescript import { createApp } from 'vue'; import { createPinia } from 'pinia'; import App from './App.vue'; const app = createApp(App); const pinia = createPinia(); app.use(pinia); app.mount('#app'); ``` 9. 在组件中使用 Pinia store。在你的 Vue 组件中,可以使用 `useStore` 函数来访问 Pinia store: ```typescript import { useCounterStore } from '../store'; export default { setup() { const counterStore = useCounterStore(); return { counterStore, }; }, }; ``` 10. 最后,你可以在组件中使用 `counterStore` 来访问状态和操作: ```vue <template> <div> <p>{{ counterStore.count }}</p> <button @click="counterStore.increment()">Increment</button> <button @click="counterStore.decrement()">Decrement</button> </div> </template> <script> import { useCounterStore } from '../store'; export default { setup() { const counterStore = useCounterStore(); return { counterStore, }; }, }; </script> ``` 这样,你就可以使用 Vue 3、TypeScriptVite 和 Pinia 搭建一个基本的项目并进行状态管理了。希望对你有帮助!如果还有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值