vite+vue3+ts 项目初始化操作

Posted 奥特曼 

tags:

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

1.项目创建

pnpm create vue
# or
npm init vue@latest
# or
yarn create vue
#or
npm create vue@3
#or
npm create vue@2 // 创建vue2项目 更好的支持ie11

// 经常使用
npm init vue@latest
#or
pnpm create vue@latest

create vue是vite +Vue项目的脚手架工具 

2.选择构建依赖

✔ Project name: … vue-project
✔ Add TypeScript? … No / `Yes`  //添加typescript
✔ Add JSX Support? … `No` / Yes  // 添加JSX支持
✔ Add Vue Router for Single Page Application development? … No / `Yes`// 添加vueRouter
✔ Add Pinia for state management? … No / `Yes`  // 为状态管理添加Pinia
✔ Add Vitest for Unit Testing? … `No` / Yes     // 为单元测试添加Vitest
✔ Add Cypress for both Unit and End-to-End testing? … `No` / Yes //为单元和端到端测试添加Cypress
✔ Add ESLint for code quality? … No / `Yes` // 添加ESLint以提高代码质量
✔ Add Prettier for code formatting? … No / `Yes` //为代码格式添加Pretier

3.插件安装

必装:

  • Vue Language Features (Volar) vue3语法支持
  • TypeScript Vue Plugin (Volar) vue3项目ts支持
  • Eslint 代码风格校验

4.eslint 预制配置

.eslintrc.cjs中添加:

格式:单引号,没有分号,行宽度100字符,没有对象数组最后一个逗号

vue 组件需要大驼峰命名,除去 index 之外,App 是默认支持的

  rules: 
    'prettier/prettier': [
      'warn',
      
        singleQuote: true,
        semi: false,
        printWidth: 100,
        trailingComma: 'none'
      
    ],
    'vue/multi-word-component-names': [
      'warn',
      
        ignores: ['index']
      
    ],
    'vue/no-setup-props-destructure': ['off']
  

vscode 开启 eslint 自动修复

 "editor.codeActionsOnSave": 
        "source.fixAll": true,
    ,

5.props 进行解构响应 

允许对父传子 props 进行解构,我们会开启解构保持响应式的语法糖

// vite.config.js
export default 
  plugins: [
    vue(
      reactivityTransform: true
    )
  ]

6.注册组件 提供 declare module

import CpNavBar from '@/components/CpNavBar.vue'
 
declare module 'vue' 
  interface GlobalComponents 
    CpNavBar: typeof CpNavBar
    // 可以写入多个
  

6.安装less或sess

项目使用less预处理器,安装less,即可支持less语法:

pnpm i less -D

定义变量

// 主题
@mainColor: #000000;
// 辅助
@helpColor: #000000;
// 成功
@sucColor: #000000;
// 警告
@warnColor: #000000;

mixin.less 

.hoverShadow (@y: -3px) 
    transition: all 0.5s;
    &:hover 
        transform: translate3d(0, @y, 0);
        box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2);
    

 引入局部代码

<style lang="less" scoped>
   @import '@/assets/styles/variables.less';
    @import '@/assets/styles/mixins.less';
    h1 
        background-color: @warnColor;
        .hoverShadow(-20px);
    
</style>

 全局引入 vue.config.js

export default defineConfig(
    css: 
        preprocessorOptions: 
            less: 
                additionalData: `
                    @import "@/assets/styles/variables.less";
                    @import "@/assets/styles/mixins.less";
                `,
            ,
        ,
    ,
)

7.统一设置样式

1.安装 normalize.css

pnpm i normalize.css

2.使用 `normalize.css`,`main.ts`

import  createApp  from 'Vue'
import App from './App.Vue'
import 'normalize.css'
createApp(App).mount('#app')

8. script name

在vue2中我们都是通过 name属性直接设置了,所以说下vue3怎么使用

1.第 1 种方法,

<script>
    export default 
        name: 'Layout',
    
</script>
<script lang="ts" setup name="Layout"></script>
<template>
    <div>顶部</div>
    <div>导航</div>
    <div>路由出口</div>
    <div>底部</div>
</template>

2.第二种方法

pnpm i  vite-plugin-vue-setup-extend -D

 配置 vite.config.js

import vueSetupExtend from 'vite-plugin-vue-setup-extend'

export default defineConfig(
    plugins: [vue(), vueSetupExtend()],
)
<script lang="ts" setup name="Category">

 注意:作为路由组件适应时,script 标签内部要写点内容(注释也行),script name 才能生效。

8.接口封装

utils/request.ts  

import axios,type Method from 'axios'
import  Toast  from 'vant';

const baseURL = 'xxx'
export const instance = axios.create(
  baseURL
)
import useUserStore from '@/stores/index'
import useRouter from 'vue-router'
const router = useRouter()


// 添加请求拦截器
instance.interceptors.request.use(function (config) 
  // 在发送请求之前做些什么
  // config.headers['token'] = 'token' || ''
  const store = useUserStore()

  if (config.headers && store.user?.token) 
    config.headers['authorization'] = `Bearer $store.user?.token`

  
  return config;
, function (error) 
  // 对请求错误做些什么
  return Promise.reject(error);
);


// 添加响应拦截器
instance.interceptors.response.use(function (response) 
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  if (response.data.code != '10000') 
    Toast(response.data.message)
    return Promise.reject(response.data.message)  
  

  return response.data;
, function (error) 
  console.log('错误信息',error);


  if (error.response.data.code == '401')  
    // console.log('401了');
    const store = useUserStore()
    Toast('登录失效,请重新登录')
    store.delUser()
    router.push('/login')

  
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error);
);



// 固定格式 
type Data<T> = 
  code: string
  message: string
  data: T


// 请求工具函数
const request = <T>(url:string, method:Method='get', submitData:object) => 
  // 负责发请求:请求地址,请求方式,提交的数据
  return instance.request<T,Data<T>>(
    url,
    method,
    // 1. 如果是get请求  需要使用params来传递submitData   ?a=10&c=10
    // 2. 如果不是get请求  需要使用data来传递submitData   请求体传参
    // [] 设置一个动态的key, 写js表达式,js表达式的执行结果当作KEY
    // method参数:get,Get,GET  转换成小写再来判断
    // 在对象,['params']:submitData ===== params:submitData 这样理解
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  )


export baseURL,request

api/home.ts 二次封装

import type  , listRseponse  from '@/type/home'

import  request  from '../utils/request'

// 获取首页
export const getHomeList = (data: pageData) => request<listRseponse>('patient/home/knowledge', 'get', data)

index.vue  调用接口


<script setup lang="ts">
import  getHomeList  from '@/api/home'
const onLoad = async () => 
  finished.value=false
  // 异步更新数据
  const res = await getHomeList( current: page.value, pageSize: 10, type: props.type )
  allTotal.value = res.data.total
  list.value.push(...res.data.rows);
  page.value++
  // setTimeout 仅做示例,真实场景中一般为 ajax 请求
    loading.value = false;

    // 数据全部加载完成
    // if (list.value.length >= allTotal.value) 
    if (list.value.length >= allTotal.value) 
      finished.value = true;
    
;
</script>

以上是关于vite+vue3+ts 项目初始化操作的主要内容,如果未能解决你的问题,请参考以下文章

【Vue3+Vite+TS】1.0 项目搭建

详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia)

搭建vue3 + ts + vite项目的最佳方案是啥

vite2+ts+vue3项目创建(一)

vue3+vite2+element-plus+ts搭建一个项目

新建vite+vue3+ts项目,以及解决过程中遇到的问题