首页>>前端>>Vue->Vite+Vue3+TS搭建新项目

Vite+Vue3+TS搭建新项目

时间:2023-12-01 本站 点击:0

前言

最近有个新项目需要从0到1搭建,想着现在Vue3这么火,就决定用Vue3+Vite+TS+ElementPlus技术栈来尝试下。这篇文就来记录下搭建过程中遇到的一些问题,避免后边重复踩坑。

VueRouter

Vue2引入VueRouter的代码:

import Router from 'vue-router';Vue.use(Router);export default new Router({    routes: []})

Vue3引入VueRouter的代码:

import { createRouter, createWebHashHistory } from 'vue-router';export default createRouter({    routes: [],    history: createWebHashHistory()})

VueX

Vue2引入VueX的代码:

import Vue from 'vue';import Vuex from 'vuex';Vue.use(Vuex);const store = new Vuex.Store({    modules});export default store;

Vue3引入Vuex有一些变化:

手动导入createStore

不再需要new Vuex.Store实例

Vue3引入VueX代码:

import {createStore} from "vuex";const store = createStore({    modules});export default store;

require.context

在Vue2版本中我导入模块用了require.context方法来统一封装,大致代码如下:

//require.context:要查找的文件路径,是否查找子目录,要匹配文件的正则const modulesFiles = require.context('./modules', true, /.js$/);const modules = modulesFiles.keys().reduce((modules, modulePath) => {    const moduleName = modulePath.replace(/^./(.*).\w+$/, '$1');    const value = modulesFiles(modulePath);    modules[moduleName] = value.default;    return modules;}, {});

但是在Vue3里边这段代码报如下错误:

看起来就是webpack的require.context API不识别,看文档后修改为如下:

const modulesFiles = import.meta.globEager('./modules/*.ts');const modules = Object.keys(modulesFiles).reduce((modules, modulePath) => {    //{'msgTemplate': {xxx} }    const moduleName = modulePath.replace(/^./modules/(.*).\w+$/, '$1');    const value = modulesFiles[modulePath];    modules[moduleName] = value.default;    return modules;}, {});

可以看出我对正则表达式也进行了简单的修改,增加了modules路径,这是因为我发现modulesFiles返回的值都包含了/modules/,这与webpack的require.context API还是有些出入的。

ElementUI

Vue3需要使用Element Plus版本,因为有些公共样式是直接复用的,我就直接把原来Vue2项目的样式文件全部导进来了,结果发现一堆问题,哈哈哈~

通过SCSS变量自定义主题色

按照官方文档的介绍,把配置改为新写法,然后发现报下边的错误:

网上提供的解决方式对于我来说没用。最后发现是自己代码顺序问题,把全局theme-chalk引入写到了@forward前边。

最后配置如下:

$main-color: #00C9C9;/* icon font path, required */$--font-path: '~element-plus/lib/theme-chalk/fonts';@forward 'element-plus/theme-chalk/src/common/var.scss' with (  $colors: (    'primary': (      'base': $main-color,    ),  ),);@use "element-plus/theme-chalk/src/index.scss" as *;

变量名定义

搜了下样式代码,看到有这么一句关于$border-color的

从错误看起来element内部本身就定义了\$border-color,导致去执行了内部方法,我尝试着将变量名改为$bd-color就没问题了。

Element Plus组件语言切换

看到element组件默认语言是英文,按照官方文档提示切换成中文:

Message使用

我按照elementUI的写法直接引入了Message:

然后报如下错误:does not provide an export name 'Message'

ElementPlus把message组件换成了ElMessage,这篇文章提供了多种引入ElMessage的方法,我使用了单文件引入的处理方式(provide/inject全局引入方式未生效):

import { ElMessage } from 'element-plus';...ElMessage({    message: error.msg || '接口异常',    type: 'error',    duration: 5 * 1000});

日期控件不再支持picker-options属性

elementUI可以通过设置picker-options来设置日期属性

elementPlus去掉了picker-options属性,把内部的属性拆分开来了,可以单独一个个设置。

原文:https://juejin.cn/post/7101943335878656007


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Vue/5055.html