[完整]流程解决Vue3项目搭建步骤

这篇具有很好参考价值的文章主要介绍了[完整]流程解决Vue3项目搭建步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Vue3项目完整搭建步骤

一、 使用vite创建vue3项目

npm init vue@latest 或者npm create vite@latest进行初始化项目并创建项目名称code,进入code目录进行基本部署。

cd codenpm installnpm run dev

完成vue3项目搭建。

二、 配置vue-router

npm install vue-router@next --save

  • 分离式:**在src目录下创建router文件夹,并在文件夹下创建index.js和routes.js

index.js :(只用来存放router的配置信息)

import { createRouter, createWebHashHistory } from "vue-router"
import routes from './routes'

 const router=createRouter({
    history:createWebHashHistory(),
    routes,
})
 
export default router 

routes.js: (用来存放路由信息)

  const routes=[
 {
    path: "/",
    redirect: "/home",
  },
  {
    path: "/home",
    name: "home",
    component: () => import('@/pages/Home'),
  },
  {
        name:'page',
        path:'/page',
        component:()=>import('@/pages/page'),
        meta:{
            title:"页面"
        },
    },
];

export default routes 
  • 修改main.js

    import { createApp } from 'vue';
    import App from './App.vue';
    import router from './router';
     
    const app = createApp(App);
    app.use(router);
    app.mount('#app');
    
  • 修改App.vue

    <template>
      <router-view />
    </template>
    

调用方式

  <template>
  <div>
    <router-link to="/">Home</router-link>
    <button @click="gotoAbout"> 关于 </button>
  </div>
<script setup>
 import{useRouter} from 'vue-router'
    const router = useRouter();
    const gotoAbout = () => {
        router.push({
             path: '/about',
  			 query: { id: 123 }
        })
    }
</script>

三、封装axios

npm install axios

在src目录下创建request文件夹,在request文件夹下创建api文件夹以及index.js

api文件夹中存放交互代码,index.js中存放axios配置代码

index.js

import axios from "axios";
//为拦截器报错所用的弹框,如不需要可以不导入
import { ElMessage } from "element-plus";

const service=axios.create({
    baseURL: 'http://localhost:8980/code', //基本路径,后面可直接写/方法即可
    withCredentials: false, // 异步请求携带cookie
    // 设置请求头
    headers: {
        // 设置后端需要的传参类型
        // 'Content-Type': 'application/json;charset=UTF-8',
        // 'token': 'your token',
        // 'X-Requested-With': 'XMLHttpRequest',  
         "Access-Control-Allow-Origin": "*",
    },
      //设置请求超时时间
    timeout: 1000*60*5,
});

//*可选
//请求拦截器
service.interceptors.request.use((request)=>{
    console.log("request:",request);
    //配置请求头
    // request.headers.common['Authorization']=window.sessionStorage.getItem('token')===null? null : window.sessionStorage.getItem('token')
   //一定要把处理过的request返回
    return request;
 },
 err=>Promise.reject(err)
 );
 //响应拦截器
 service.interceptors.response.use((response)=>{
    //获取接口返回结果
    const res=response.data
    console.log("response:",response);
    if(res.code==200){
        return res;
    }else{
        ElMessage.error(res.data||'网络异常')
        return res;
    }
        // console.log("response:",response);
        // return response;
    },
    (err)=>Promise.reject(err)
 );
 export default service;

api.js:

import request from "@/request/index.js"
/**
 * @description 用户登录
 */
 export function login(data){
    return request({
        method:"post",
        url:"/user/login",
        data:data,
    });
}
/**
 * @description 获取用户信息
 */
export function getUserInfo(data){
    return request({
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' 
          },
        method:"post",
        url:"/user/getUserInfo",
        data:{
            'userId':data
        },
    });
}

调用方式(例举):

      //处理登录逻辑
     async function handleLogin(){
        try {
            const res=await login(form.value).then(res=>{
               console.log(res.data)
            })   
        } catch (error) {
            console.log(error);
        }
      }

四、Pinia集成

npm install pinia

  • 修改main.js,在main.js中添加代码:

main.js

import { createPinia } from 'pinia'
app.use(createPinia())
  • store目录下新建使用的store,此处使用store.js

注:defineStore 是需要传参的,第一个参数是标识id,第二个参数是一个对象,有三个模块, state,getters,actions。

import { ref, computed } from "vue";
import { defineStore } from "pinia";
// 选项式api写法
// export const store1 = defineStore("storeNum",{
//      state: () => {
//       return { 
//              num: 0,
//              name: "coder"}
//      },
//     actions: {
//       add() {
//         this.num++;
//       },
//     },
//   }
// );
// 组合式api写法
//ref() 就是 state 属性
//computed() 就是 getters
//function() 就是 actions
export const store2 = defineStore("storeNum",() => {
    const num = ref(0);
    const name=ref{"coder"}
    const add =()=> {
      num.value++;
    }
    return {
      num,
      add
    };
  },
);

  • 组件中使用Pinia
<script setup>
import { store2 } from '@/stores/store.js'
import { storeToRefs } from 'pinia'
const storeNum = store()
let {name,num}=storeToRefs(storeNum); //解构,修改必须引用storeToRefs进行解构处理
const clickHanlde=()=>{
	storeNum.add();}
const batchHanlde = ()=>{
	//store批量处理
	storeNum.$patch(state=>{
		state.num++;
		state.name = 'newCoder';
	})
}
	//状态重置
const resetBtn=()=>{
	storeNum.$reset()
}
</script>
<template>
	<div>Add{{ storeNum.add }}</div>
	<button @click="clickHanlde">Num++</button>
	<button @click='batchHanlde'>批量处理</button>
	<button @click='resetBtn'>重置</button>
</template>

数据持久化存储,即刷新页面后也能存储数据

npm i pinia-plugin-persist

  • 在store目录下新建一个配置文件index.js,或者直接在main.js中添加

    注:个人觉得分离后代码更清晰(主观)

import { createPinia } from "pinia";
import {createPersistedState } from 'pinia-plugin-persistedstate'
const pinia = createPinia()
pinia.use(createPersistedState({
    serializer:{   // 指定参数序列化器
        serialize: JSON.stringify,
        deserialize: JSON.parse
    }
}))
export default pinia
  • 加入持久化存储后store.js的写法
import { ref, computed } from "vue";
import { defineStore } from "pinia";
// 选项式写法
// export const store = defineStore("storeId",{
//     state: () => ({ num: 0 }),
//     actions: {
//       add() {
//         this.num++;
//       }
//     },
//     启用持久化存储(全局持久化)
//     persist: { enabled: true,  // 配置key和持久化存储的方式
//                strategies: [{
//                   key: 'numStore',
//                   storage: window.localStorage,  //默认localStorage,/sessionStorage
//                   }]
//                } 
// );

// 组合式写法 
export const store = defineStore("storeId",() => {
    const num = ref(0);
    const name=ref("coder");
    const age=ref(18);
    const add =()=> {
      num.value++;
    }
    return {
      num,
      add
    };
  },
  {
//  选项式写法演示的是全局持久化,组合式写法演示的是指定字段持久化,不配置默认全部持久化
//  persist: true, 
    persist: {  enabled: true,
              strategies: [{
                  			storage: window.localStorage,
                            paths: ['name', 'num'] // paths配置需要持久化的字段
                            beforeRestore: context => {
            						console.log('Before', context)
                             },
                            afterRestore: context => {
            						console.log('After', context)
        					}
                           }]
              }
  },                                
);

五、vite设置代理解决跨域问题

vite.config.js中配置,代理前端端口到后端8080端口

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

//自动导包,与代理无关(可忽略)
import AutoImport from 'unplugin-auto-import/vite'

export default defineConfig({
    plugins: [
        vue(),
        AutoImport({
            imports['vue','vue-router']
        })
    ],
    server:[
         proxy:{
              //可直接写:'/api ': 'http://localhost:8080/'
         	  '/api':{
                   target: 'http://127.0.0.1:8080', //目标url
       			   changeOrigin: true, //支持跨域
                   ws: true, //允许websocket代理
        		   rewrite: (path) => path.replace(/^\/api/, ""), //重写路径,替换/api
			  }
       	 }
    ]
})

六、vite配置@

配置时.vue文件需要加.vue后缀,不能省略,js可省略,适用vue3.1以上版本

vite.config.js中配置

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import {resolve} from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    //配置路径别名
    alias: {
      '@' : resolve(__dirname,'./src'),
    }
  }
})

七、Vite配置setup语法糖插件:解决import{ref,reactive...}引入问题

  1. npm i unplugin-auto-import -D

  2. 在vite.config.js中配置文章来源地址https://www.toymoban.com/news/detail-588910.html

    //1. 引入插件
    import AutoImport from 'unplugin-auto-import/vite'
    
    export default defineConfig({
      plugins: [vue(),
               //2. 在plugins中添加AutoImport
                AutoImport({
                    imports:['vue']
                })
               ],
    })
    

到了这里,关于[完整]流程解决Vue3项目搭建步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在vue3中使用pinia完整流程图文

    使用vite创建好一个vue3项目,开发语言选择ts 使用 npm i pinia -s 安装最新版本的pinia 这里我的版本安装的是 2.1.4 1.在main中注册pinia 2.在store中创建index.ts和store-name.ts文件 index.ts内容如下: store-name.ts内容如下: app.vue文件的内容如下: 页面输出如下内容则一次简单的pinia的调用完

    2024年02月10日
    浏览(43)
  • 一步步完整搭建一个图纸管理系统(Django+Vue3)

    需要将终端改成虚拟环境的解释器后,简单试运行: 由于我们把子项目都放在apps里面了(方便统一管理)所以注册要加入一段配置 一定要注意格式 (1)安装pymysql (2)gveInformationSystem/settings中进行相关配置 (3)需要在init.py导入pymysql (在:apps/DrawingManagementSystem/models.py)

    2024年02月06日
    浏览(48)
  • 最快的包管理器--pnpm创建vue项目完整步骤

    1.用npm全局安装pnpm 2.在要创建vue项目的包下进入cmd,输入: 3.输入项目名字,选择Router,Pinia,ESLint,Prettier之后点确定 4.cd到创建好的项目 ,安装依赖 5.启动项目

    2024年02月07日
    浏览(34)
  • Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(六)

    今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的 GithHub 上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多

    2024年02月10日
    浏览(45)
  • Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(一)

    今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的 GithHub 上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多

    2024年02月06日
    浏览(57)
  • Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(二)

    今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的 GithHub 上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多

    2024年02月07日
    浏览(41)
  • Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(三)

    今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的 GithHub 上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多

    2024年02月08日
    浏览(44)
  • Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(四)

    今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的 GithHub 上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多

    2024年02月08日
    浏览(44)
  • Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(八)

    今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的 GithHub 上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多

    2024年02月11日
    浏览(35)
  • vue3项目服务器静态文件部署增加指定路由地址完整实现

    在 Vue 3 项目中,如果你想要配置服务器以便让它在特定的地址上运行,你通常是在使用 Vue CLI 的 devServer 配置。这主要是通过修改 vue.config.js 文件实现的。 如果你希望开发服务器绑定到特定地址,比如 192.168.1.100 ,可以这样做: 在项目根目录下创建或修改 vue.config.js : 如果你

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包