Vue 3 + TypeScript + Vite + Element-Plus + Router + Axios + Pinia项目搭建(内含完整架构)
安装Vue3+ts+vite
npm init vite@latest
选择y,新建项目名称,选择vue,选择vue-ts
下载完成后执行以下命令行
cd 新建的项目名称
npm i
npm run dev
安装Element-Plus
npm install element-plus --save
安装完后给main.ts配置以下代码
import { createApp } from 'vue'
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css'
import App from './App.vue'
createApp(App).use(ElementPlus).mount('#app')
在 tsconfig.json 中通过 compilerOptions.type 指定全局组件类型。
// tsconfig.json
{
"compilerOptions": {
"types": ["element-plus/global"]
}
}
自动导入两款插件使用方法
#选择一个你喜欢的包管理器
#NPM
# npm install -D unplugin-vue-components unplugin-auto-import
#Yarn
$ yarn add -D unplugin-vue-components unplugin-auto-import
安装完成后打开vite.config.ts文件,复制以下代码到vite.config.ts里
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),]
})
在页面中渲染
Default
Primary
Success
Info
Warning
Danger
中文
效果如下:
引入router,axios,Pinia
一、安装router
npm install vue-router
在src下新建router文件夹/index.ts
配置内容如下:
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import Home from '../view/Home.vue';
const routes: Array = [
{
path: '/',
name: 'index',
component: Home,
},
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router;
main.ts添加router
import { createApp } from 'vue'
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css'
import router from './router/index'
import App from './App.vue'
createApp(App).use(ElementPlus).use(router).mount('#app')
更改页面结构
在src中新增view文件夹,里面新建Home.vue
Default
Primary
Success
Info
Warning
Danger
中文
import { onBeforeMount, onMounted } from "vue";
export default {
name: "",
setup() {},
};
App.vue页面
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {
filter: drop-shadow(0 0 2em #42b883aa);
}
.logo.element:hover {
filter: drop-shadow(0 0 2em #459FFCaa);
}
效果:
二、安装axios
npm install axios
pnpm install axios
可参考以下封装方法:
request.ts
import axios from 'axios'
// 创建axios
const service = axios.create({
// baseURL: '/api',
baseURL: 'http://xxx.xxx.xx.xxx',
timeout:80000
});
// 添加请求拦截器
service.interceptors.request.use(
(config:any) => {
let token:string =''//此处换成自己获取回来的token,通常存在在cookie或者store里面
if (token) {
// 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
config.headers['X-Token'] = token
服务器托管网
config.headers.Authorization = + token
}
return config
},
error => {
// Do something with request error
console.log("出错啦", error) // for debug
Promise.reject(error)
}
)
service.interceptors.response.use(
(response:any) => {
return response.data
}, /* */
error => {
console.log('err' + error) // for debug
if(error.response.status == 403){
// ElMessage.error('错了')
console.log('错了');
}else{
// ElMessage.error('服务器请求错误,请稍后再试')
console.log('服务器请求错误,请稍后再试');
}
return Promise.reject(error)
}
)
export default service;
main.ts
import { createApp, useAttrs } from 'vue'
import ElementPlus from 'element-plu服务器托管网s';
import 'element-plus/dist/index.css'
import router from './router/index'
import App from './App.vue'
let app = createApp(App)
import axios from './utils/request'
app.config.globalProperties.$http = axios;
const pinia = createPinia()
app.use(ElementPlus).use(router).mount('#app')
service.ts
import service from "../request"
// 获取seller
export function getSeller(params:any){
return service.request({
method:'POST',
url:'接口一',
data:params
})
}
export function Login(params:any){
return service.request({
method:'POST',
url:'接口二',
data:params
})
}
页面调用
// 接口引入地址
import { getTest} from "../utils/api/service";
/* 调用接口 */
getTest('放入params参数').then(response => {
console.log("结果", response);
})
.catch(error => {
console.log('获取失败!')
});
三、安装Pinia
npm add pinia@next
挂载Pinia
main.ts
如果按照上面步骤来的话可以直接替换main.ts
import { createApp, useAttrs } from 'vue'
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css'
import router from './router/index'
import App from './App.vue'
import {createPinia} from 'pinia'
let app = createApp(App)
import axios from './utils/request'
app.config.globalProperties.$http = axios;
const pinia = createPinia()
app.use(ElementPlus).use(pinia).use(router).mount('#app')
新建store文件夹/userCount.ts
import { defineStore } from 'pinia'
// defineStore( ) 方法的第一个参数:相当于为容器起一个名字。注意:这里的名字必须唯一,不能重复。
export const user = defineStore('user', {
state: () => {
return {
num:1
}
},
getters: {
},
actions: {
}
})
需要使用的页面里
{{num}}
import { useMainStore } from "../../store/module/useCountStore";
const mainStore = useMainStore();
console.log(mainStore.count);
地址如下: 完整架构
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
确保CentOS系统上的SSH服务器已安装并正在运行: 在CentOS上,默认情况下,SSH服务器(sshd)应该已安装并正在运行。如果不确定,可以通过以下方式检查: sudo systemctl status sshd 如果未安装,请安装SSH服务器: su…