首页 > 其他分享 >【vue3】vue3+ts+vite项目创建

【vue3】vue3+ts+vite项目创建

时间:2023-02-25 19:01:55浏览次数:59  
标签:npm const ts current vue3 Test import vite

1、npm init vite@lastest

 2、项目目录结构

 

 3、npm install(i)  安装依赖(是根据package.json中devDependencies的依赖安装的)

启动命令 dev  

打包命令 build

预览生产环境命令  preview

 

 

 解决方案:全局安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org

 

 但是系统不让使用cnpm 

因为全局安装后需要执行以下策略,以管理员的身份运行 Windows PowerShell  

然后执行set-ExecutionPolicy RemoteSigned(用来改变执行策略)

选择Y

 

 然后再进入到vite-demo中安装依赖

 

 4、代码规模及其他配置,

以下3个是新增的

  • .editorconfig  不同IDE统一编码风格
  • .prettierrc    编码规则
  • .prettierignore   忽略文件

5、配置@路径

vite.config.ts文件中配置

原来文件的代码

 

 

 安装node类型声明文件,让vite 识别@符号,执行

npm i @types/node -D

 接下来在vite,config.ts中配置

const path = require("path")

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// 这里使用nodejs的模块,可能会报错,需要安装node的类型声明文件
const path = require('path')
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src')
    }
  }
})

接下来让配置tsconfig.json 配置baseUrl,paths

这一步的作用是让 IDE 可以对路径进行智能提示

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

 6、使用npm 安装依赖失败

安装依赖总是失败,所以node 降级到v.16.19.0版本

 

 

7、CSS预处理器 

安装

npm i -D sass

 

vite全局配置css(ps:一定要加分号)

  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `
          @import "@/assets/styles/flex.scss";
          @import "@/assets/styles/reset.scss";
          @import "@/assets/styles/common.scss";
        `, 
      },
    },
  },

 

8、因为common.scss中有注释掉的css报错(待解决)

9、卸载依赖

 

10、安装路由

使用Vue3 安装对应的router4版本

使用Vue2安装对应的router3版本

npm install vue-router@4

 使用

1、在src下的router目录新建index.ts和routes.ts 

 

 2、在routes.ts中定义路由

ps:注意路由数组routes的类型,有的说是

 

 3、index.ts

导入routes

创建路由

导入路由

 

 在main.ts中引入

import { createApp } from "vue";
import App from "./App.vue";
import router from "@/router";
createApp(App).use(router).mount("#app");

 

11、安装Element UI

npm install element-plus --save

 在main.ts

// main.ts
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'

const app = createApp(App)

app.use(ElementPlus)
app.mount('#app')

 12、安装Animate.css(动画库)

npm install animate.css --save
引用
import 'animate.css';
<h1 class="animate__animated animate__bounce">An animated element</h1>

 13、安装axios

npm install axios -S

使用

 

import axios from "axios";

14、pinia

安装

npm install pinia -S

在main.ts中引入

 

 

 

createPinia 是一个hock ,导出后是一个插件,需要app.use()注册
import { createApp } from 'vue'
import App from './App.vue'
import {createPinia} from 'pinia'
 
const store = createPinia()
let app = createApp(App)
 
 
app.use(store)
 
app.mount('#app')

定义store

src目下新建一个名为stores的文件下

新建 index.ts

store-namespace.ts   //  以枚举的形式定义store的名字

export const enum Names {
    Test = 'TEST'
}

index.ts  定义一个store

ps: state 是一个箭头函数,返回一个对象,在对象中定义值

import { defineStore } from 'pinia'
import { Names } from './store-namespce'
 
export const useTestStore = defineStore(Names.Test, {
     state:()=>{
         return {
             current:1,
        age:8
} }, //类似于computed 可以帮我们去修饰我们的值 getters:{ }, //可以操作异步 和 同步提交state actions:{     setCurrent () { this.current++ } } })

在组件中应用

<template>
     <div>
         <button @click="Add">+</button>
          <div>
             {{Test.current}}
          </div>
          <div>
            {{Test.age}}
          </div>
     </div>
</template>
 
<script setup lang='ts'>
import {useTestStore} from './store'
const Test = useTestStore()
const Add = () => {
     Test.setCurrent()
}
 
</script>
 
<style>
 
</style>

修改state的5中方法

1、直接修改 Test.current++

2、$patch方法批量修改   Test.$patch({current:200,age:300})

3、$patch 方法的函数形式修改Test.$patch((state)=>{state.current++;state.age = 40})  (推荐此方法)

4、通过$state修改,但是必须修改整个对象的所有属性Test.$state = {current:10,age:30}

5、通过actions修改(可以直接使用this, actions 中的函数不要使用箭头函数,this问题)

actions:{
         setCurrent () {
             this.current++
         }
     }

 

解构store

Pinia是不允许直接解构是会失去响应性的

解决方案是storeToRefs()

import { storeToRefs } from 'pinia'
 
const Test = useTestStore()
 
const { current, name } = storeToRefs(Test)
<template>
  <div>origin value {{Test.current}}</div>
  <div>
    pinia:{{ current }}--{{ name }}
    change :
    <button @click="change">change</button>
  </div>
</template>
  
<script setup lang='ts'>
import { useTestStore } from './store'
 
const Test = useTestStore()
 
const change = () => {
   Test.current++
}
 
const { current, name } = Test
 
console.log(current, name);
 
 
</script>
  
<style>
</style>

Actions,getters

 

 

 

 

 

相关资料:

  1. actions:{
  2.   setCurrent () {
  3.   this.current++
  4.   }
  5.   }
  6.  

标签:npm,const,ts,current,vue3,Test,import,vite
From: https://www.cnblogs.com/websmile/p/17103788.html

相关文章

  • Vue3 + Vite +TS 项目问题总结
    最近做的几个Vue项目基本都收尾了,总结一下在项目中遇到的问题,希望能帮助遇到同样问题的小伙伴项目情况:我做的项目都是Vue3.2(setup语法)+Vite+TS,一个H5项目,一个PC前......
  • [vite] Internal server error: Invalid end tag.
    使用vue3+vite+ant搭建的前端框架在开发页面的时候发现了一直报错:[vite]Internalservererror:Invalidendtag.找也找不到为什么,网上查的方法都没有用。后来发现是......
  • 【vue3】实现全屏功能
    前言全屏效果:实现安装依赖包npmi@vueuse/core调用import{useFullscreen}from'@vueuse/core'useFullscreen的使用文档:https://vueuse.org/core/useFull......
  • 【Hive 元数据和真实数据-TAB_COL_STATS记录错误问题】
    MySql的元数据以及HDFS上数据的关系 元数据在DBS和TBLS上(SD_ID)1首先通过hive创建一个表table_test在hdfs的存储路径会生成相应的表TBLS也会更新内容进行记录2通......
  • Vue3学习笔记(1)
    安装//使用yarn构建//安装yarn需要管理员权限sudonpmiyarn-gyarncreatevitecd..yarnyarndev目录结构见名知义四种......
  • latch: row cache objects等待dc_rollback_segments的处理
    上午有客户遇到UNDO空间问题导致的latch:rowcacheobjects(dc_rollback_segments ),经排查为节点2的UNDO表空间使用率100%,大部分为UNEXPIRED状态的UNDO段。虽然UNDO表空......
  • [Typescript] Constraint inputs types
    constreturnsValueOnly=<T>(t:T)=>{returnt;}constresult=returnsValueOnly("a");//constreturnsValueOnly:<"a">(t:"a")=>"a"constreturnsVal......
  • vue3兄弟组件传参
    兄弟组件传参数mitt使用方式和vue2的事件大巴类似。安装npmimitt-S新建plugin/Bus.jsimportmittfrom'mitt'cosntemitter=mitt()exportdefaultemitterHome.vue<t......
  • vue3插槽
    父级组件中使用 ​​<A></A>​​并且不提供任何插槽内容时,子组件中 ​​<slot></slot>​​标签中的内容当作默认内容展示。v-slot只能添加在​​<template​​(一种情......
  • 一图揭秘为什么开发者都偏好华为云CodeArts IDE Online?
    华为云开发者桌面服务CodeArtsIDEOnline,提供了可随时随地编码的云上开发环境,同时具备开放的生态和独立插件市场,旨在为开发者提供环境快速获取、功能开箱即用、跨越计算架......