vue3搭建项目yarn+vue3+webpack+less+element-plus
·
技术:vue3 yarn webpack Element Plus
1.创建项目
yarn 方法
#-------------------------------------
# yarn 方法
yarn global add @vue/cli
# 2. 创建项目
vue create my-vue3-webpack-app
# 3. 在交互式菜单中选择 Vue 3
# 使用方向键选择 "Manually select features"
# 确保选中 "Vue Version" 并选择 3.x
# 其他选项按需选择
npm 方法
#---------------------------------------------
npm install -g @vue/cli
# 2. 创建项目
vue create my-vue3-webpack-app
# 3. 在交互式菜单中选择 Vue 3
# 使用方向键选择 "Manually select features"
# 确保选中 "Vue Version" 并选择 3.x
# 其他选项按需选择
# 4. 进入项目目录
cd my-vue3-webpack-app
# 5. 启动开发服务器
npm run serve
2.运行
yarn 方法
cd my-vue3-webpack-app
yarn serve
npm 方法
cd my-vue3-webpack-app
npm run serve
3.安装插件
当你需要退出正在运行的服务时,通常可以使用 ctr+Y ctr+C 组合键来停止服务。
yarn 方法
yarn add element-plus
# 安装vue3
yarn add vue@next
yarn add vue-router@4.0.0
yarn add vuex@next
npm 方法
npm install element-plus --save
# 安装vue3
npm install vue@next
npm install vue-router@4.0.0
npm install vuex@next --save
4.修改代码
(1).修改以下代码添加路由
src下新增router/index.js
import { createRouter, createWebHistory } from "vue-router";
const routes = [
{
path: "/",
name: "IndexPage",
meta: { title: "正在打开" },
component: () => import("@/page/indexPage"),
}
];
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes,
});
export default router;
添加page/indexPage.vue
<template>
<div class="hello">
111444
</div>
</template>
<script setup>
</script>
<style>
</style>
修改App.vue
<template>
<router-view :key="route.fullPath"></router-view>
</template>
<script setup>
import {useRoute} from 'vue-router'
let route = useRoute();
</script>
<style>
修改main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from "@/router";
createApp(App).use(router).mount('#app')
修改vue.config.js
const { defineConfig } = require('@vue/cli-service')
const path = require('path')
function resolve(dir) {
return path.join(__dirname, dir)
}
module.exports = {
// Vue CLI 配置选项
devServer: {
port: 8080,
},
configureWebpack: (config) => {
// 配置别名
config.resolve.alias = {
...config.resolve.alias,
'@': resolve('src'),
'@components': resolve('src/components'),
'@views': resolve('src/views'),
'@assets': resolve('src/assets'),
'@utils': resolve('src/utils'),
'@api': resolve('src/api'),
'@store': resolve('src/store'),
'@router': resolve('src/router')
}
}
// 其他配置...
}
```bash
(2).添加环境变量
.env.development .env.production 两个文件
如何添加.env.development .env.production 文件
(3).全局添加element-plus
5.安装less
# 使用 npm
npm install less less-loader --save-dev
# 使用 yarn
yarn add less less-loader -D
全局配置
#vue.config.js
module.exports = {
css: {
loaderOptions: {
less: {
additionalData: `@import "@/assets/styles/variables.less";`
}
}
}
// 其他配置...
}
variables.less 定义变量
@less-font-size-14:14px;
index.vue使用
<style lang="less">
.main{
font-size: @less-font-size-14;
}
</style>
6.element-plus-icons 安装注册使用
npm install @element-plus/icons-vue
# 或者
yarn add @element-plus/icons-vue
import { createApp } from 'vue'
import App from './App.vue'
import { Edit, Search, Delete } from '@element-plus/icons-vue'
const app = createApp(App)
# // 按需注册图标
app.component('EditIcon', Edit)
app.component('SearchIcon', Search)
app.component('DeleteIcon', Delete)
app.mount('#app')
# //在特定的组件中局部注册图标。
<template>
<div>
<edit-icon />
</div>
</template>
<script>
import { Edit } from '@element-plus/icons-vue'
export default {
components: {
EditIcon: Edit
}
}
</script>
7.vuex模块引入、注册及常量配置
import store from './store'
createApp(App).use(ElementPlus).use(router).use(store).component('SearchIcon', Search).mount('#app')
代码配置参考:https://blog.csdn.net/qq_41521625/article/details/148850431?spm=1001.2014.3001.5502.
8.安装axios
npm install axios
# 或
yarn add axios
9.安装加密文件crypto-js
npm install crypto-js
yarn add crypto-js
10.添加接口文件,及统一接口处理文件,完成接口访问
#src/api/index.js
import request from "@/utils/request";
// 注册
export function register(data) {
return request({
url: "/userRegister",
method: "post",
data,
});
}
export function login(params) {
return request({
url: "/userRegister",
method: "get",
params,
});
}
#src/utils/request.js
import axios from "axios";
import Aes from "@/utils/aes-ecb";
import {
ElMessage
} from 'element-plus'
// create an axios instance
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
timeout: 15000, // request timeout
});
const key = process.env.VUE_APP_AES_KEY;
const iv = process.env.VUE_APP_AES_IV;
// request interceptor
service.interceptors.request.use(
(config) => {
config.headers["XX-Token"] = localStorage.getItem('token',)
config.headers["XX-Device-Type"] = "pc";
if (config.method === "post") {
const formdata = new FormData()
const arr = Aes.encrypt(
key,
JSON.stringify(config.data),
iv,
)
formdata.append('data', arr)
config.data = formdata
} else if (config.method === "get") {
config.params = {
data: Aes.encrypt(
key,
JSON.stringify(config.params),
iv,
)
};
}
return config;
},
(error) => {
ElMessage.error(error)
return Promise.reject(error);
}
);
// response interceptor
service.interceptors.response.use(
(response) => {
const res = response.data;
if (res.code !== 0) {
const errorMap = {
10001: () => location.reload(),
1: () => ElMessage.error(res.msg),
// 其他错误码...
}
errorMap[res.code]?.()
return Promise.reject(res)
} else {
res.data = Aes.decrypt(key, res.data, iv, );
return res;
}
},
(error) => {
// Toast(error);
ElMessage.error(error)
return Promise.reject(error);
}
);
export default service;
#src/page/index.vue
import {settingInfo} from '@/api/index.js'
onMounted(() => {
serviceFun()
});
const serviceFun = async () => {
settingInfo({ id:'3'}).then((res) => {
console.log("res",res)
if (res !== undefined) {
name.value = res.data.name;
} else {
// ElMessage.error("请联系管理员!")
}
});
}
11. 设置token,完成登录及超时
安装js-cookie:
npm install js-cookie --save
yarn add js-cookie --save
清理缓存
# 清理 npm 缓存
npm cache clean --force
# 或者 yarn 缓存
yarn cache clean
更多推荐
所有评论(0)