vite + vue3 + element-plus + axios + vueRouter + vuex + scss 搭建项目

简介: 如果需要使用状态管理工具,那个在src下面创建一个store文件夹,然后里面写vuex的配置,我这里使用的是模块,模块里面的内容和vuex3是一样的,调用方式也是一样的

准备工作


1.先搭建一个vue工程,这里有两种办法,一种是使用vue-cli ,另一种是使用vite(一种新的构建工具),具体搭建 传送门


2.搭建好项目后,我们就可以安装对应的库了,这里需要安装以下的这些库:


  • npm install --save axios 这个库不需要说使用next版本,vue升级和发起http请求没有直接的关系,所以axios不用说要不要升级安装 axios官网
  • npm install element-plus --save 这个库是element 团队针对vue3而专门开发的库,对于vue3的库,除了elment-plus外,还有ant-design 等 element-plus 官网
  • npm install vue-router@4 这个是vue router 专门的库,现在还是带测试的版本,但是如果需要在vue3中使用路由,那么需要使用这个库, 官网
  • npm install sass -D 这个是sass 的库,这里为啥不需要安装sass--loader 或者 style-loader 或者 node-sass 呢? 这个在设计的时候,vue3 的缔造者 在设计vue 的时候已经考虑过这件事情,vite 这个构建工具里面集成了scss, less ,stylus 等, 原话如下 That said, Vite does provide built-in support for .scss, .sass, .less, .styl and .stylus files. There is no need to install Vite-specific plugins for them, but the corresponding pre-processor itself must be installed as a peer dependency: vite 的官网
  • npm install vuex@next --save 这个是vuex的库,如果需要使用则需要安装这个库, vuex官网


最后我的package.json 的情况如下:


20210107172744638.png


项目编写


在项目编写阶段,由于本人现在也是在体验vue3的阶段,下面可能也会有理解错误的地方,还请大家多多指教


配置vue的环境


直接在根目录建立vite.config.js,里面的常用配置如下:


const path = require('path')
export default function () {
    return {
        // 代理,最重要,其他的都可以有默认配置
        proxy: {
            '/api': {
                target: 'http://localhost:9011',
                changeOrigin: true,
            }
        },
        // 入口
        entry: 'index.html',
        // 出口
        outDir: './../public/html',
        // 打包后的跟路径
        base: '/',
        // 输出的静态资源的文件夹名称
        assetsDir: 'assets',
        // 是否开启ssr服务断渲染
        ssr: false,
        // 重命名路径  path.resolve(__dirname, './src')
        alias: {
            '/@/': path.resolve(__dirname, './src')
        },
        // 端口
        port: 3002,
        // 是否自动开启浏览器
        open: false,
        // 开启控制台输出日志
        silent: false,
        // 那个包不需要打包
         optimizeDeps: {
            exclude: ['element-plus']
        },
        // css预设的配置
        cssPreprocessOptions: {
            scss: {
                additionalData: '@import "style/var.scss";', // 添加公共样式
            },
        }
    }
}


详细配置


起步的main.js


创建一个vue的实例,导入element-plus, 导入vue-router,


或者vuex,但是这里都需要通过createApp链式调用来使用插件


import {createApp} from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus';
import '../style/index.scss';
import 'element-plus/lib/theme-chalk/index.css';
import router from "./router";
import vuex from "./vuex";
createApp(App).use(router).use(ElementPlus).use(vuex).mount('#app')


创建路由


在src文件夹下面创建router文件夹,里面配置vue的路由


import {createRouter, createWebHistory} from 'vue-router';
import {routes} from "./routes";
const router = createRouter({
    history: createWebHistory(), // 路由的history模式
    routes, // 导入路由的配置, 和vue2里面的路由一样
})
export default router;
//注意: 在.vue组件中如果需要使用router,则需要导入useRouter这个方法,需要使用route,则需要导入,useRoute这个方法


是否需要状态管理工具


如果需要使用状态管理工具,那个在src下面创建一个store文件夹,然后里面写vuex的配置,我这里使用的是模块,模块里面的内容和vuex3是一样的,调用方式也是一样的


import {createStore} from 'vuex'
import userModule from "./userModule";
export default createStore({
    modules: {
        userModule: userModule,
    }
})
//模块例子
export default {
    namespaced: true,
    state: {
        isLoading: false,
        data: null,
    },
    mutations: {
        // 设置是否正在加载
        setIsLoading(state, payload) {
            state.isLoading = payload;
        },
        // 设置用户数据
        setData(state, payload) {
            state.data = payload
        }
    },
    actions: {
        // 登录
        async login({commit}, {loginId, loginPwd}) {
            commit('setIsLoading', true);
            const r = await login(loginId, loginPwd)
            commit('setData', r);
            commit('setIsLoading', false);
            return r;
        },
    }
}
// 注意: 如果在.vue组件中需要使用store,需要导入 userStore的这个方法
// 例如:在vue的setup函数中使用
import {useStore} from "vuex";
import {computed} from "vue";
import {useRouter} from "vue-router";
export default {
  setup() {
    const store = useStore();
    const router = useRouter();
    const loginOut = () => {
      store.dispatch('userModule/loginOut');
      router.push('/login')
    }
    return {
      isLoading: computed(() => store.state.userModule.isLoading),
      data: computed(() => store.state.userModule.data),
      loginOut,
    }
  }
}


直接撸代码


对于撸代码的话,和vue2里面的差不多,只是vue3里面增加了compositionAPI 里面有比较大的改动,在写代码的时候,难免会有磕磕碰碰,祝愿大家在写代码的时候,写的都对。


这篇文章是基于本人想实现一个图片的网站,后台使用node,前台使用vue3,作为自己的练手项目,毕竟公司里面现在使用vue3对自己也哪方面都不好。 有兴趣的可以看看 项目地址 演示地址

相关文章
|
13小时前
|
JSON 数据可视化 数据库
vue3+threejs+koa可视化项目——实现登录注册(第三步)
vue3+threejs+koa可视化项目——实现登录注册(第三步)
42 5
|
13小时前
|
数据可视化 前端开发 JavaScript
vue3+threejs可视化项目——引入threejs加载钢铁侠模型(第二步)
vue3+threejs可视化项目——引入threejs加载钢铁侠模型(第二步)
77 3
|
13小时前
|
JavaScript 数据可视化 算法
vue3+threejs可视化项目——搭建vue3+ts+antd路由布局(第一步)
vue3+threejs可视化项目——搭建vue3+ts+antd路由布局(第一步)
38 6
|
13小时前
|
资源调度 JavaScript 前端开发
vue 项目运行过程中出现错误的问题解决
vue 项目运行过程中出现错误的问题解决
12 1
|
13小时前
|
JavaScript
vue项目切换页面白屏的解决方案
vue项目切换页面白屏的解决方案
8 0
|
13小时前
|
XML JavaScript 前端开发
Vue3 项目中怎么使用 jsx——易懂
Vue3 项目中怎么使用 jsx——易懂
7 0
|
13小时前
|
前端开发 JavaScript 数据格式
vue3中axios添加请求和响应的拦截器
vue3中axios添加请求和响应的拦截器
12 1
|
13小时前
|
JSON 数据可视化 前端开发
vue3+threejs+koa可视化项目——模型文件上传(第四步)
vue3+threejs+koa可视化项目——模型文件上传(第四步)
18 7
|
13小时前
|
JavaScript 安全 前端开发
Vue 项目中的权限管理:让页面也学会说“你无权访问!
Vue 项目中的权限管理:让页面也学会说“你无权访问!
34 3
|
13小时前
|
缓存 前端开发 JavaScript
前端vue3分享——项目封装axios、vite使用env环境变量
前端vue3分享——项目封装axios、vite使用env环境变量
22 0